【问题标题】:C - redefinition because of head inclusionC - 由于头部包含而重新定义
【发布时间】:2020-07-08 07:03:30
【问题描述】:

我使用 ANCI C 在 C 中编程,但布尔定义有问题。 我创建了一个只包含'''typedef enum { false, true } bool;'''的头文件bool.h。 问题是我有 2 个头文件,我们称它们为 a.h 和 b.h,其中包含这个 bool.h,因为它们都有返回 bool 的函数原型。 而且我还有另外一个头文件c.h,里面包含了a.h和b.h,导致了bool重定义的编译错误。 https://imgur.com/a/CUu897f

【问题讨论】:

  • 使用包含/标题保护? en.wikipedia.org/wiki/Include_guard。或者更好的是,忘记“ANSI C”并使用标准 C,#include <stdbool.h>
  • 我希望我能忘记 ANSI C,这是我为大学课程做的一个项目。还有谢谢你的头卫,我没听说过,但我不认为我被允许使用它......
  • 世界上每个 C 程序员都对每个头文件使用头保护。当然你可以使用它们。
  • @Lundin Header guards 是这个问题应得的答案。将其发布为答案
  • 好吧,我已经问过了,但我不允许使用包含保护...所以我需要一个不同的解决方案,但非常感谢您的帮助

标签: c boolean redefinition ansi-c


【解决方案1】:

Lundin 是对的:头球后卫是 的方法。实际上,这可能是唯一被广泛接受的方法。不使用头部保护的限制确实很奇怪,我只能想知道这有什么意义。无论如何,可能有办法解决它,但从实际的角度来看这是完全错误的。

你可以这样做:

main.c:

typedef bool {false, true} bool;
#include "a.h"
#include "b.h"

int main(int argc, char **argv)
{
...
}

然后从 a.h 和 b.h 中删除 #include "bool.h"

可以解决问题,但 - 再一次 - 根本不应该这样做。

【讨论】:

  • 刚刚意识到它是在一年多以前被问到的 :-)
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 2015-11-29
  • 2010-09-18
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多