#include guards不起作用,#pragma一次就过时了

时间:2016-05-20 10:15:10

标签: c include cross-compiling

有两个头文件_stub_defs.h

  

///存根码      #pragma曾经      #include“random.h”
     #include< stdarg.h>

和stasrg.h

  

#ifndef __GNUC_VA_LIST
     #define __GNUC_VA_LIST
     typedef __builtin_va_list __gnuc_va_list;
     #endif

当我使用我的交叉编译器(sparc-rtems-gcc)进行编译时,两个头文件都被包含在内。然后终端告诉我:

  

警告:#pragma曾经过时了      stdarg.h:`__gnuc_va_list'的冲突类型

     

stdarg.h:先前声明`__gnuc_va_list'

显然,#include guards不起作用。这是头文件代码的问题还是交叉编译器的问题?

1 个答案:

答案 0 :(得分:1)

包括警卫工作。你还有另一个问题。

调试此方法的最佳方法是仅运行C预处理器。对于gcc(包括交叉编译器gcc),您可以使用-E选项。只需将其添加到编译阶段即可。您将在预处理器阶段之后获得一个C文件,而不是获取目标文件。

获取该文件,然后在那里搜索重复的定义。该文件还将具有标记,告诉编译器此定义最初来自哪个文件,以及包含嵌套时的标记。如果您遵循这些定义,您将看到两个定义的来源以及每个定义包含的文件。