我有做一些工作的功能。
啊啊
void doSomething(int n);
A.cpp
#include "A.h"
void doSomething(int n) {
/* something */
}
如果我想在另一个源文件中使用这个函数,最好的选择是什么:
1) 包含A.h
B.cpp
#include "A.h"
void anotherTask() {
// ...
doSomething(5);
// ...
}
2) 或使用前向声明(函数原型(prototype)):
B.cpp
void doSomething(int);
void anotherTask() {
// ...
doSomething(5);
// ...
}
关于尽可能多地为类使用前向声明,有很多提示。那么,函数前向声明的最佳实践是什么?
UPD
好吧,这个例子太简单了。
如果 header A.h 有一些垃圾怎么办(相对于 B.cpp,它对驱动程序级别一无所知):
啊啊
#include "specific_driver_header.h" /* some lowlevel stuff that B.cpp couldn't know */
#define SPECIFIC_DRIVER_DEFINES 0xF0 /* useless define for B.cpp that uses global namespace */
void doSomething(int n); /* only significant function for B.cpp */
如果我在 B.cpp 中包含 A.h,那么 B.cpp 将不依赖于驱动程序或类似的东西。 在这种情况下我应该使用变体 (2) 吗?
最佳答案
尽可能在标题中使用原型(prototype)。这可以防止意外更改一个地方,而不是另一个地方。
例如,将函数更改为:
void doSomething(long n);
现在还有另外两个地方:函数的定义和要更改的 b.cpp 原型(prototype)。
如果您有 header ,编译器至少会有机会告诉您“这看起来不对”。而不是你迟到了链接器错误......
关于c++ - 函数原型(prototype) vs 在 cpp 中包含 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774361/