我已经知道包括警卫,但这里有一些我想弄清楚的问题:
示例 1
Foo.h
int SumOfNums(int i, int j);
Foo.cpp
#include "Foo.h"
int SumOfNums(int i, int j){
return i+j;
}
主文件
#include "Foo.h"
#include "Foo.h"
int main(){
SumOfNumbs(5,10);
}
这将编译并运行正常。
示例 2
Foo.h
int SumOfNums(int i, int j);
int i;
Foo.cpp
#include "Foo.h"
int SumOfNums(int i, int j){
return i+j;
}
主文件
#include "Foo.h"
int main(){
SumOfNumbs(5,10);
}
根据编译器重新定义“i”。
示例 3
Foo.h
int SumOfNums(int i, int j);
enum FooBar{FOO, BAR};
Foo.cpp
#include "Foo.h"
int SumOfNums(int i, int j){
return i+j;
}
主文件
#include "Foo.h"
int main(){
SumOfNumbs(5,10);
}
这将编译并运行正常。
示例 4
Foo.h
int SumOfNums(int i, int j);
enum FooBar{FOO, BAR};
Foo.cpp
#include "Foo.h"
int SumOfNums(int i, int j){
return i+j;
}
主文件
#include "Foo.h"
#include "Foo.h"
int main(){
SumOfNumbs(5,10);
}
根据编译器重新定义 FooBar。
把它们加起来:
示例 1 - 为什么 Foo.h 可以在 main.cpp 中包含两次,而没有包含保护?
示例 2 - int 变量与函数头有何不同?
示例 3 - 当 Foo.cpp 中有一个 FooBar 定义而 main.cpp 中有一个定义时,为什么链接器不报错?
示例 4 - 这与示例 1有什么区别?