【问题标题】:struct redefinition issue with system files系统文件的结构重定义问题
【发布时间】:2011-06-21 21:26:58
【问题描述】:

在 Mac OS X 上,我的代码中包含 /usr/include/net/bpf.h 和 /usr/include/pcap/bpf.h。现在这两个都定义了一些相同的结构,所以我得到一个重新定义错误。我需要这两个文件,因为它们都有我需要的其他代码。 我的问题是, 如何在我的代码中使用它而无需修改任一系统文件?有没有办法让我在我的代码中做到这一点,而不必简​​单地创建这个头文件的副本并使用它来代替?

我不想修改这些文件,因为其他应用程序只包含这两个文件之一,并且需要定义结构。 提前致谢。

【问题讨论】:

    标签: c header include structure


    【解决方案1】:

    一些头文件有#defines 来处理这种情况。例如在 windows 中,如果你想使用 winsock2 并拥有 windows.h,你需要这样做:

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <winsock2.h>
    

    否则windows.h 中包含的winsock1 的定义会与winsock2 冲突。然而,我怀疑pbf.h 是否属于这种情况。这种模式在 unix 中很少出现。

    最后的选择是决定您需要更多的头文件,删除第二个并手动添加您缺少的定义,然后从第二个复制粘贴。您可能想编写一个小脚本,根据函数的名称为您进行复制粘贴,这样它就不会那么脆弱了。

    【讨论】:

    • 所以我首先包含 /usr/include/net/bpf.h 然后包含 /usr/include/pcap/bpf.h 文件,这解决了我的问题。但是,如果我首先包含 pcap/bpf.h 文件,则会收到这些错误。
    猜你喜欢
    • 2017-10-19
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2012-02-13
    • 2011-06-22
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多