我知道在编译成实际值之前已经取代了#define。那么为什么这里的第一个代码编译时没有错误,而第二个代码没有?
第1名;
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("bc");
return 0;
}
第二次(不工作);
#include <stdio.h>
#include <stdlib.h>
#define Str "bc";
int main()
{
printf(Str);
return 0;
}
error: expected ')' before ';' token
谢谢你的回答,抱歉我的英语不好......
答案 0 :(得分:4)
实际上第二部作品而第一作品没有。问题是分号:
#define Str "bc";
^
答案 1 :(得分:4)
因为Str
宏的计算结果为"bc";
,所以包含分号。所以你的宏扩展到:
printf("bc";);
您不需要使用带分号的#define。它们以换行符结束,而不是像C语句那样以分号结尾。我知道这令人困惑; C预处理器是一个奇怪的野兽,是在人们更清楚之前发明的。
答案 2 :(得分:3)
使用
#define Str "bc"
在替换后使用您的定义,它将如下所示:
printf("bc";);
答案 3 :(得分:3)
第一个问题是Str
被"bc";
替换。
将其更改为
#define Str "bc"
答案 4 :(得分:2)
你需要删除;在哪里定义str。因为你会得到printf(“bc”;);
答案 5 :(得分:1)
第一个代码无法编译,因为你需要在#define第二个代码正常工作之后删除分号。
答案 6 :(得分:1)
第一个不起作用,因为这些行:
#define Str "bc";
printf(Str);
扩展到这一行:
printf("bc";);
你想:
#define Str "bc"