C语言宏定义的问题

酱油几时有 2014-08-31 04:41:28
请问下面的代码为什么可以通过编译,还能运行?



#include <stdio.h>

#define aaa bbb

void aaa()
{
printf("aaa()\n");
}

int main()
{
bbb();
}


运行输出结果是:
aaa()

百度百科的“宏定义”词条里面说的格式是这样的:

宏定义又称为宏代换、宏替换,简称“宏”。
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名”。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。


而上面的代码把标识符和字符串反过来了,即:
#define 字符串 标识符

而这样为什么还能通过编译,并且还能运行输出结果?






...全文
215 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
酱油几时有 2014-08-31
  • 打赏
  • 举报
回复
原来如此,谢谢各位了
zilaishuichina 2014-08-31
  • 打赏
  • 举报
回复
lz的代码相当于

#include <stdio.h>
 
void bbb()
{
   printf("aaa()\n");
}
 
int main()
{
   bbb();
 }
707wk 2014-08-31
  • 打赏
  • 举报
回复
引用 2 楼 dbzhang800 的回复:
因为代码没有问题,无论是用 aaa替换bbb,还是bbb替换aaa,都没有问题
+1
竹影半墙 2014-08-31
  • 打赏
  • 举报
回复
x86/Debian GNU/Linux/gcc
vi macro.c

lly@debian:~/mydir/csdn/marco$ gcc -E macro.c
........
void bbb()
{
printf("aaa()\n");
}

int main()
{
bbb();
}
lly@debian:~/mydir/csdn/marco$
神奕 2014-08-31
  • 打赏
  • 举报
回复
把aaa换成了bbb

#include <stdio.h>

void bbb()
{
	printf("aaa()\n");
}

int main()
{
	bbb();
}
dbzhang800 2014-08-31
  • 打赏
  • 举报
回复
因为代码没有问题,无论是用 aaa替换bbb,还是bbb替换aaa,都没有问题
taodm 2014-08-31
  • 打赏
  • 举报
回复
楼主,看教材,别扯百度百科,浪费生命不是怎么浪费的。

69,371

社区成员

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

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