C中变量初始化的宏。
#define abcd
char abcd c[] = "AJITH";
for(i=0;i<5;i++){
printf("%c",c[i]);
}
输出: - AJITH
为什么没有编译器显示错误?这是什么意思?
答案 0 :(得分:0)
由于#define
没有abcd
的替换文字,预处理器基本上会删除abcd
的任何出现,所以
char abcd c[] = "AJITH";
变为
char c[] = "AJITH";
答案 1 :(得分:0)
abcd
已展开为空白。
所以char abcd c[] = "AJITH"
扩展为char c[] = "AJITH"
,这非常好。
以下是仅在预处理(gcc -E)
之后程序的输出 char c[] = "AJITH";
int i;
for(i=0;i<5;i++){
printf("%c",c[i]);
}
答案 2 :(得分:0)
声明
#define abcd
macro-body
没有macro-name
。所以它将一无所获取代macro-name
。
预处理器后,您的下面的代码
#define abcd
int main(void) {
char abcd c[] = "AJITH";
for(int i=0;i<5;i++){
printf("%c",c[i]);
}
return 0;
}
看起来像这样
int main(void) {
char c[] = "AJITH";
for(int i=0;i<5;i++){
printf("%c",c[i]);
}
return 0;
}
因此它会打印AJITH
为什么没有编译器显示错误?这个#define abcd
是一个空字符串&amp;根据C标准允许空定义。
来自 C11标准(n1570),§6.10预处理指令
控制线:
# define identifier replacement-list new-line # define identifier lparen identifier-list(opt) ) replacement-list new-line # define identifier lparen ... ) replacement-list new-line # define identifier lparen identifier-list , ... ) replacement-list new-line replacement-list: pp-tokens(opt)
正如您在上面看到的replacement-list:
以及令牌列表&amp;这可能是空的。