gpt4 book ai didi

#else 预处理器指令后的注释

转载 作者:行者123 更新时间:2023-12-02 08:01:45 24 4
gpt4 key购买 nike

这是一段简单的 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 预处理器确实允许任意文本出现在#else#endif 之后的行中,并且旧程序会使用它。您的编译器是向后兼容的,允许那些旧程序编译而不会出错。

许多 C 编译器默认允许许多现在被认为是不良风格或完全错误的东西,以允许旧代码继续工作。查看 Visual Studio 手册,看看是否有推荐的配置可用于新程序。我自己不使用 VS,所以我无法提供任何更具体的建议。

关于#else 预处理器指令后的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56399577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com