const int的多重定义

时间:2012-09-10 15:54:25

标签: int const

我有一个头文件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唯一的方法?

3 个答案:

答案 0 :(得分:2)

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

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

enum { ID = 4 };

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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

当你将一个整数变量定义为const时,编译器可能并且经常会在使用该变量时插入该值,并且永远不会为它分配存储

获取标识符的地址时会发生异常。在这种情况下,存储大多数是分配的,如果声明在头文件中,则会发生多个定义。 在这种情况下,您别无选择,只能使用extern