gpt4 book ai didi

c - 非指令是合法的 c 预处理指令吗?

转载 作者:行者123 更新时间:2023-12-01 23:27:01 27 4
gpt4 key购买 nike

The c99 standard几乎没有提到非指令 - 只是说它是“指令”,在非法放置在宏参数列表中的意义上(脚注 150,附于 6.10.3p11)。

人们会认为这种缺乏定义意味着任何非指令都会导致未定义的行为,并且应该报告为错误,而 gcc 和 clang 大多都是这种情况。

但是,在两个编译器中,行:

# 123 "filename"

相当于:

# line 123 "filename"

即使设置了 -std=c99 标志。

为什么会这样?我只找到了 a single mention of it online , 没有决议。

最佳答案

C 2018 6.10 9 说:

The execution of a non-directive preprocessing directive results in undefined behavior.

所以,是的,它是“合法的”(C 标准不禁止您将它包含在您的程序中或禁止 C 实现定义行为),但 C 标准未定义其行为。

该段未出现在 C 1999 标准中,但该行为仍因遗漏而未定义(C 1999 4 2:“......未定义的行为在本国际标准中以“未定义的行为”或“未定义的行为”一词表示)省略任何明确的行为定义……”)。

关于c - 非指令是合法的 c 预处理指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67064235/

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