c中#define出现奇怪错误

时间:2011-07-15 08:12:52

标签: c compiler-errors printf c-preprocessor

我知道在编译成实际值之前已经取代了#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

谢谢你的回答,抱歉我的英语不好......

7 个答案:

答案 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"