【发布时间】:2016-09-17 13:29:06
【问题描述】:
有两个头文件_stub_defs.h
///存根代码
#pragma 一次
#include "random.h"
#include
和 stasrg.h
#ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST
typedef __builtin_va_list __gnuc_va_list;
#endif
当我使用我的交叉编译器(sparc-rtems-gcc)进行编译时,两个头文件都包含在内。然后终端告诉我:
警告:#pragma once 已过时
stdarg.h:`__gnuc_va_list' 的类型冲突stdarg.h: `__gnuc_va_list' 的先前声明
很明显,#include 守卫不起作用。这是头文件代码的问题还是我的交叉编译器的问题?
【问题讨论】:
-
_stub_defs.h是工具链标题还是您可以修改它?如果你可以在那里使用stasrg.h的相同方法。 -
当然包含警卫工作。该符号必须已在其他地方定义。
-
你从哪里得到
stasrg.h? (这不是我遇到的标准标题——它是<stdarg.h>的拼写错误?)如果你写了它,你就没有资格这样做。也就是说,如果您在 C11 模式下编译并且 typedef 相同,则不应出现该错误。你应该去掉#pragma once——只要不被滥用,标题保护就可以工作。
标签: c include cross-compiling