C语言宏定义名可以有括号和分号吗?

例如定义一个宏名 AAA(); 是否可以?
#define AAA(); printf("a");printf("b");printf("c");

宏定义的名称,是C语言标识符的一种,和函数名,变量名的命名规则是一样的,只允许使用数字,字母,下划线,且不能以数字开头。
所以宏名是不可以有括号和分号的。

另外,在C语言编程中,一般约定宏名用大写字母加下划线组成,而避免使用小写字母。这一条并非是C语言规范强制要求,而是编程时的一种习惯。
也就是说,宏定义my_print是合法的,可以被C语言编译器接收,但一般书写习惯更倾向于写作MY_PRINT。
这样约定的好处是,当遇见全部为大写字母和下划线组成的标识符时,就可以认作是宏定义了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-06
可以这么写,不会出错,不过一般标准写法是
#define AAA() printf("a");\
printf("b");\
printf("c")//这里不要分号本回答被提问者采纳
第2个回答  2011-10-09
宏定义不需要分号的

宏是被预编译器处理,到编译器的时候,宏已经不存在了。
所以宏的定义格式和 源代码不同的。所有带 # 号的都是预编译命令
第3个回答  2015-09-21
宏名称命名和变量名规则一样
第4个回答  2018-05-20
我曾经见到一个应用中有这样的宏定义,而且在keil中编译是通过的,没有报错:
#define col1() P3 |= 0x3f; P3 &= 0xfe;
#define col2() P3 |= 0x3f; P3 &= 0xfd;
#define col3() P3 |= 0x3f; P3 &= 0xfb;
#define col4() P3 |= 0x3f; P3 &= 0xf7;
#define col5() P3 |= 0x3f; P3 &= 0x2f;
#define col6() P3 |= 0x3f; P3 &= 0x1f;
谁说宏定义中不能包含分号?
相似回答