C/C++头文件含函数定义还是仅声明?以pow()为例解析
C/C++头文件中的声明与定义问题
头文件里只放函数声明,不会包含函数定义。要是把函数定义写到头文件里,多个源文件include这个头文件时,每个源文件都会生成一份函数定义的副本,链接阶段就会报重复定义的错误,还会增加代码冗余。
拿
math.h里的pow()函数举例:头文件里只会有它的声明,比如:double pow(double base, double exponent);除此之外,
math.h还会包含一些数学相关的宏定义(比如M_PI这类常量)、类型别名或者其他数学函数的声明,但绝对不会有pow()的具体实现代码。要让编译器正确链接到
pow()的定义,关键是编译时告诉链接器要链接系统的数学库。因为pow()的实现是放在系统提供的数学库文件里(比如Linux下的libm.so/libm.a,Windows下的msvcrt.lib这类),用GCC或Clang编译时,需要加-lm参数来指定链接这个数学库,链接器就会自动找到库里的pow()定义并合并到你的程序中。
内容的提问来源于stack exchange,提问作者shivansh gautam
相关产品推荐
相关产品推荐

