gpt4 book ai didi

c - 是否有任何 C 编译器会警告使用未声明的定义

转载 作者:太空狗 更新时间:2023-10-29 15:02:10 25 4
gpt4 key购买 nike

我最近遇到了以下构造

#if BYTE_ORDER == LITTLE_ENDIAN
do_something();
#endif

如果 BYTE_ORDERLITTLE_ENDIAN 均未定义,则会编译“do_something()”。虽然这不是不合理的行为,但在这种情况下,我在 gcc 上找不到任何选项给我警告。

如果没有警告,您可能会陷入相当令人担忧的情况,有人可以删除一个明显未使用的 header ,这将完全改变编译的结果,因为它导致包含一个定义了这两个宏的 header (并定义了它们不同)。

最佳答案

来自 man gcc:

-Wundef
Warn if an undefined identifier is evaluated in an #if directive.

因此:

echo -e '#if BYTE_ORDER == LITTLE_ENDIAN\n#endif'|gcc -E - -Wundef

打印:

# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"
<stdin>:1:5: warning: "BYTE_ORDER" is not defined [-Wundef]
<stdin>:1:19: warning: "LITTLE_ENDIAN" is not defined [-Wundef]

而且 -Werror=undef 会变得更好。 😉

关于c - 是否有任何 C 编译器会警告使用未声明的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30526560/

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