【发布时间】:2013-12-31 03:23:48
【问题描述】:
看看这段代码:
#include <stdio.h>
#define _ONE "one"
#define _TWO_AND ", two and "
int main()
{
const char THREE[6] = "three" ;
printf(_ONE _TWO_AND "%s.\n", THREE );
return 0;
}
printf 实际上是:
printf("one" ", two and " "%s.\n", "three" );
输出是:
一、二、三。
gcc 在编译此代码后既不提供错误消息,也不提供警告消息。
gcc 编译器应该以这种方式工作,还是一个错误?
【问题讨论】:
-
你的 gcc 命令是什么样子的?
-
您显然是在假设代码是无效的 C。您为什么要这样假设?
-
我不知道为什么由于没有发生 SSCCE 而另外两票要关闭。该代码明确展示了 OP 想要知道的是否是标准行为,并且它确实可以编译和运行。即使存在原始拼写错误,问题的意图也很明显。
标签: c gcc syntax c-preprocessor string-literals