在#else 预处理器指令后注释
Comment after #else preprocessor directive
这是一段简单的 C 代码,令我惊讶的是它编译成功(至少在我使用的 Visual Studio 2012 中)
#include <stdio.h>
#define MYCONSTANT
int main(int argc, char* argv[])
{
#ifdef MYCONSTANT // We can write anything here as comment
printf("MYCONSTANT is defined");
#else We can write any random words here without marking it as comment
printf("MYCONSTANT is not defined");
#endif
return 0;
}
问题:在 #else
之后可以这样写吗?
在标准 C 中,不允许 在 #else
或 #endif
之后的行中放置注释以外的任何内容。使用我计算机上的编译器,默认情况下我会从您的代码中收到警告:
test.c: In function ‘main’:
test.c:9:11: warning: extra tokens at end of #else directive [-Wendif-labels]
#else We can write any random words here without marking it as comment
^~
如果我要求严格遵守 C99,这将成为一个硬错误。
然而,原始的 "K&R" C 预处理器 did 允许任意文本出现在 #else
和 #endif
之后的行上,而旧的程序会使用它。您的编译器正在 backward-compatible 并允许那些旧程序编译而不会出错。
许多 C 编译器默认允许许多现在被认为是不良风格或完全错误的东西,以允许旧代码继续工作。查看 Visual Studio 的手册,看看是否有推荐的配置可用于新程序。我自己不使用 VS,所以无法给出更具体的建议。
这是一段简单的 C 代码,令我惊讶的是它编译成功(至少在我使用的 Visual Studio 2012 中)
#include <stdio.h>
#define MYCONSTANT
int main(int argc, char* argv[])
{
#ifdef MYCONSTANT // We can write anything here as comment
printf("MYCONSTANT is defined");
#else We can write any random words here without marking it as comment
printf("MYCONSTANT is not defined");
#endif
return 0;
}
问题:在 #else
之后可以这样写吗?
在标准 C 中,不允许 在 #else
或 #endif
之后的行中放置注释以外的任何内容。使用我计算机上的编译器,默认情况下我会从您的代码中收到警告:
test.c: In function ‘main’:
test.c:9:11: warning: extra tokens at end of #else directive [-Wendif-labels]
#else We can write any random words here without marking it as comment
^~
如果我要求严格遵守 C99,这将成为一个硬错误。
然而,原始的 "K&R" C 预处理器 did 允许任意文本出现在 #else
和 #endif
之后的行上,而旧的程序会使用它。您的编译器正在 backward-compatible 并允许那些旧程序编译而不会出错。
许多 C 编译器默认允许许多现在被认为是不良风格或完全错误的东西,以允许旧代码继续工作。查看 Visual Studio 的手册,看看是否有推荐的配置可用于新程序。我自己不使用 VS,所以无法给出更具体的建议。