#ifndef 可以忽略方法或变量重复吗?
Can #ifndef ignore method or variable duplications?
考虑代码。
#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 文件中。当我只编译case 1没有错误的时候,其他的case都抛出duplication的错误。
为什么 foo.h
除了编译时没有连接到 C 文件外,为什么会这样?
关于案例2:
你应该只声明函数签名,而不是主体。它与预处理器命令无关。
在头文件中(仅声明)
#if <Condition>
void foo();
#endif
在 C 文件中
#if <Condition>
void foo(){
//body
}
#endif
关于案例 3:
和case 2类似,如果变量是 extern 则需要在头文件中声明,否则不需要在头文件中声明。如果它们被声明为extern,它们也需要在没有extern关键字的C文件中声明:
头文件中:
#if <Condition>
extern int bar;
#endif
在C文件中:
#if <Condition>
int bar;
#endif
考虑代码。
#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 文件中。当我只编译case 1没有错误的时候,其他的case都抛出duplication的错误。
为什么 foo.h
除了编译时没有连接到 C 文件外,为什么会这样?
关于案例2:
你应该只声明函数签名,而不是主体。它与预处理器命令无关。
在头文件中(仅声明)
#if <Condition>
void foo();
#endif
在 C 文件中
#if <Condition>
void foo(){
//body
}
#endif
关于案例 3:
和case 2类似,如果变量是 extern 则需要在头文件中声明,否则不需要在头文件中声明。如果它们被声明为extern,它们也需要在没有extern关键字的C文件中声明:
头文件中:
#if <Condition>
extern int bar;
#endif
在C文件中:
#if <Condition>
int bar;
#endif