-1

我有一个头文件A.h,我在其中定义了一个const int ID = 4;. 我已将此头文件包含在 C 文件A.cmain.c. 我使用了标头保护#ifndef A_H #define A_H等。但是multiple definition of ID当我尝试编译代码时出现错误。我在某处读到,在大多数情况下,可以通过使用来避免这种情况,#pragma once但我仍然得到错误。我的问题是如何在 C 中定义变量?我是否必须将 ID 的定义移至 C 文件,然后我必须在我使用的每个文件中声明它?还是extern在这种情况下使用唯一的方法?

4

2 回答 2

2

在 C 中,每个对象只能有一个定义。.o如果您有多个文件(编译单元),包括警卫和类似的东西对此没有帮助。他们每个人都有一个副本,这是不允许的。

如果您不需要该对象的地址并且只对它的常量值感兴趣,则可以将其替换为

enum { ID = 4 };

ID这定义了一个类型的命名值int,您可以轻松地将其放入头文件中。

于 2012-09-10T15:58:35.310 回答
1

是的,使用extern是唯一的解决方案。pragma或 include 保护防止在同一个翻译单元中多次包含,这是一个多重定义错误。

于 2012-09-10T15:55:29.220 回答