我有几个文件 main.c,main.h,some_funcs.c和some_funcs.h。
main.h is included in main.c
main.h include some_funcs.h
some_funcs.c include some_funcs.h
当我现在定义一个新的数据类型时:
//Datatypes
enum _bool {
false = 0,
true = 1
};
typedef enum _bool Bool;
如果我在例如main.h并希望在some_func.c中使用它,它不起作用。有没有办法在某处定义它而不总是包含定义它的标题?
答案 0 :(得分:3)
将定义放在some_funcs.h
中。这将使它在main.h,main.c,some_funcs.h和some_funcs.c中可见。
更通用的解决方案是将常用数据类型放入名为common.h
的文件中。
然后,您将此文件包含在所有头文件中。
这将是common.h
文件的内容。 ifdef
将忽略文件的内容(如果已包含该文件)。
#ifndef COMMON_H
#define COMMON_H
//Datatypes
enum _bool {
false = 0,
true = 1
};
typedef enum _bool Bool;
#endif
答案 1 :(得分:1)
有没有办法在某处定义它而不总是包含定义它的标题?
NO。
您必须在每个源文件中包含标头。
通常的做法是拥有自己的typdef.h
。在其中定义您自己的数据类型,并将其包含在您感兴趣的源文件中。
答案 2 :(得分:1)
有没有办法在某处定义它而不总是包含 标题在哪里定义?
听起来我可以使用类型的定义而不定义它。:)
您应该包含头文件,其中枚举和typedef在每个使用它的模块中定义。
考虑到C中有1)类型_Bool
和2)标准标题<stdbool.h>
,其中宏bool
,false
和true
是已定义。