我有一个C项目,其中所有代码都组织在*.c
/ *.h
文件对中,我需要在一个文件中定义一个常量值,但也可以在其他文件中使用.我该如何声明和定义这个值?
它应该static const ...
在*.h
文件中吗?如extern const ...
在*.h
文件中并在*.c
文件中定义?以何种方式,没关系吧的价值是不是原始数据类型(int
,double
,等),但char *
还是struct
?(虽然在我的情况下是一个double
.)
在*.h
文件中定义内容通常不是一个好主意; 一个人应该在*.h
文件中声明事物,但在*.c
文件中定义它们.但是,这种extern const ...
方法似乎效率低下,因为编译器无法内联该值,而是必须始终通过其地址进行访问.
我想这个问题的实质是:是否应该在C static const ...
中的*.h
文件中定义值,以便在更多的位置使用它们?
我遵循的规则是仅在H文件中声明事物并在C文件中定义它们.您可以在单个C文件中声明和定义,假设它只在该文件中使用.
通过声明,我的意思是通知编译器它的存在,但不为它分配空间.这包括#define
,typedef
,extern int x
,等等.
定义为声明赋值并为它们分配空间,例如int x
和const int x
.这包括函数定义; 包含这些在头文件中经常导致浪费的代码空间.
我看到太多初级程序员const int x = 7;
在输入头文件时会感到困惑,然后想知道为什么他们因为x
多次定义而得到链接错误.我认为,至少你需要static const int x
这样才能避免这个问题.
我不会太担心代码的速度.计算机的主要问题(在速度和成本方面)很久以前从执行速度转向易于开发.