gpt4 book ai didi

C++ 如何保护自己不受 stdio.h 宏的影响

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:06 24 4
gpt4 key购买 nike

我花了很长时间试图找出为什么以下代码无法编译:

enum IPC_RC {OK, EOF, ERROR, NEW };

错误消息只说明了它不希望看到左括号的意思。直到我尝试在更现代的编译器上编译它,我才了解到:

/usr/include/stdio.h:201:13: note: expanded from macro 'EOF'
#define EOF (-1)

所以我终于被宏烧死了! :)

我的代码没有#include <stdio.h> (我没有包含任何带有 .h 后缀的内容),但显然我包含的内容导致包含 <stdio.h>。 .有什么方法( namespace ?)可以保护我自己,而无需追查它的确切位置吗?

最佳答案

命名空间不是解决方案,因为宏会忽略它们。

所以你有两个选择:

  • 自己摆脱那些宏:

    #ifdef EOF
    #undef EOF
    #endif
  • 为您的枚举值使用前缀:

    enum IPC_RC
    {
    IPC_OK,
    IPC_EOF,
    IPC_ERROR,
    IPC_NEW
    };

关于C++ 如何保护自己不受 stdio.h 宏的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17800691/

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