gpt4 book ai didi

c - #include 守卫不起作用,#pragma Once 已过时

转载 作者:行者123 更新时间:2023-11-30 15:08:31 27 4
gpt4 key购买 nike

有两个头文件_stub_defs.h

///stub code
#pragma once
#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)编译时,两个头文件都包含在内。然后终端告诉我:

warning: #pragma once is obsolete
stdarg.h: conflicting types for `__gnuc_va_list'

stdarg.h: previous declaration of `__gnuc_va_list'

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

最佳答案

包括 guard 工作。你还有一个问题。

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

获取该文件,并在那里搜索重复的定义。该文件还将具有告诉编译器该定义最初来自哪个文件的标记,以及嵌套包含时的标记。如果您按照这些操作,您将看到这两个定义的来源以及哪个文件包含它们。

关于c - #include 守卫不起作用,#pragma Once 已过时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344027/

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