#ifndef可以忽略方法或变量重复吗?

时间:2015-09-30 14:27:43

标签: c conditional-compilation ifndef

考虑代码。

#ifndef FOO_H
#define FOO_H
//Code
#endif

代码可以是以下案例

// Case 1: 
#define foo 0
// Case 2:
void foo_method(){};
// Case 3:
int foo;

foo.h包含在许多C文件中。当我只编译案例1没有错误时,其他情况会抛出重复错误。

为什么在foo.h没有连接到C文件时除了编译时的文件?

1 个答案:

答案 0 :(得分:7)

关于案例2:
你应该只声明函数签名,而不是正文。它与预处理器命令无关。

头文件中的

(仅限decleration)

#if <Condition>
void foo();
#endif

在C档案中

#if <Condition>
void foo(){
   //body
}

#endif

关于案例3:
它类似于案例2,另外如果它们是 extern ,你应该在头文件中声明变量,否则不需要在头文件中声明它们。如果将 声明为extern,则还需要在没有extern关键字的C文件中声明它们:

头文件中的

#if <Condition>
extern int bar;
#endif

在C文件中:

#if <Condition>
int bar;
#endif