gpt4 book ai didi

c++ - 这个无括号的 C 预处理器定义安全吗?

转载 作者:IT老高 更新时间:2023-10-28 12:49:55 28 4
gpt4 key购买 nike

在我的 /usr/include 目录中,至少有两个针对 C++ 代码量身定制的 #define NULL 0 变体1:

#define NULL 0    // from rpc/types.h
#define NULL (0) // from libio.h

我觉得肯定有一个反例,第一个不安全,但我无法制作它。

否则,是否有一些令人信服的论据说明为什么在这种情况下不包含括号是安全的(例如,非正式的“正确性证明”)?


1 即不包括变体#define NULL ((void*)0),对C有用但无效在 C++ 中。

最佳答案

没有区别。唯一具有较高优先级的运算符是 ::++--,它们不适用于 0也不是 (0).

我看到的唯一有趣的区别是混淆:

#define NULL (0)

void f(int x)
{
// Do something with x
}

int main()
{
f NULL; // This code compiles
return 0;
}

关于c++ - 这个无括号的 C 预处理器定义安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30345734/

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