gpt4 book ai didi

c++ - 在宏参数中使用#line 指令是否合法?

转载 作者:太空狗 更新时间:2023-10-29 19:48:17 26 4
gpt4 key购买 nike

我注意到这个程序是用 gcc 编译的:

#define X(A) A

int x = X(
#line 3 "test1.c"
0
);

但是,Visual Studio 无法编译它:

main.cpp
main.cpp(6): error C2121: '#': invalid character: possibly the result of a macro expansion
main.cpp(6): error C2065: 'line': undeclared identifier
main.cpp(6): error C2143: syntax error: missing ';' before 'constant'
main.cpp(6): error C2059: syntax error: 'constant'

我想知道:该程序是否合法,或者它是否默默地依赖于碰巧使 gcc 接受代码的未定义(或实现定义)行为?

最佳答案

无效。该行为未定义,因此不需要诊断,并且允许实现接受代码。

来自C标准,6.10.3宏替换:

11 [...] If there are sequences of preprocessing tokens within the list of arguments that would otherwise act as preprocessing directives, the behavior is undefined.

C++ 标准在 16.3 宏替换中包含这些完全相同的词。

关于c++ - 在宏参数中使用#line 指令是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28343501/

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