【发布时间】:2012-10-03 23:21:58
【问题描述】:
我已经知道包含守卫,但这里有一些我想弄清楚的问题:
示例 1
Foo.h
int SumOfNums(int i, int j);
Foo.cpp
#include "Foo.h"
int SumOfNums(int i, int j){
return i+j;
}
main.cpp
#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;
}
main.cpp
#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;
}
main.cpp
#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;
}
main.cpp
#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 中有一个 FooBar 定义时,链接器不报错?
示例 4 - 这与 示例 1 有什么区别?
【问题讨论】:
标签: c++