关于这么使用#define的依据?

lostlander 2007-03-01 08:43:40
int main()
{
#define name "username"
printf("%c",name[0]);
return 0;
}

name在编译的时候被处理成"username", 也就是指向这个字符串的指针?
那么在这里, 这个过程在编译的时候是如何处理的?

能否提供相关具体的关于C编译器的参考资料?
...全文
451 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
redstorm_fyy 2007-03-16
  • 打赏
  • 举报
回复
"username"[0];
罕见的语法啊
Cnwanglin 2007-03-16
  • 打赏
  • 举报
回复
服了
aimbin 2007-03-15
  • 打赏
  • 举报
回复
编译之前有预处理过程,直接替换掉了
Mobidogs 2007-03-15
  • 打赏
  • 举报
回复
楼上,讲的够清楚了.
chensanniang 2007-03-12
  • 打赏
  • 举报
回复
很明显会输出u,字符串常量也可以相当于指向本身首地址的指针.同意jixingzhong(瞌睡虫·星辰)的观点.
Jokar 2007-03-12
  • 打赏
  • 举报
回复
预编译期由预处理器替换的
jixingzhong 2007-03-12
  • 打赏
  • 举报
回复
printf("%c","username"[0]);

"username" 它其实是一个指向 "username" 这个字符串的首地址指针,
那么 "username"[0] 就是 .....
todototry 2007-03-12
  • 打赏
  • 举报
回复
int main()
{
#define name "username"
printf("%c",name[0]);
return 0;
}
============
“username”是文本字符串常量,类型是个常量字符数组,而数组可当成个常量指针使用
所以相当于字符数组的首字符
mLee79 2007-03-12
  • 打赏
  • 举报
回复
ls 看题不仔细, 题目显然是对的 ...
编译器看不到 #define , 预处理器已经把它处理成了 printf("%c","username"[0]); 鸟 ...
ka_ng 2007-03-12
  • 打赏
  • 举报
回复
编译器首先扫描语法有无错误。你#define name "username"后,它处理printf("%c",name[0]);语句时直接当做printf("%c","username"[0]);处理,这样显然有语法错误啦。
printf("%c",name);就行了
lostlander 2007-03-01
  • 打赏
  • 举报
回复
编译器如何处理的? 能否说说具体过程.
还有就是相关资料.
thx
fosjos 2007-03-01
  • 打赏
  • 举报
回复
直接替换:
printf("%c","username"[0]);

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧