Devc++怎么把工程里的c全只include一个自己头文件? 50
我想把所有其他头放到自己的头文件里,然后其他.c全部include那一个头,不知道怎么操作啊?我选择了连接时包含就说重定义,可是我已经ifndef保护了啊?如果不连接时包...
我想把所有其他头放到自己的头文件里,然后其他.c全部include那一个头,不知道怎么操作啊?我选择了连接时包含就说重定义,可是我已经ifndef保护了啊?如果不连接时包含就说函数未定义。
展开
1个回答
展开全部
看描述,你把函数实现写到头文件中了。
只有inline函数才能写到头文件中。如果是非inline函数,你包含一次,就相当于实现一次,连接时,就会找到同一个函数的多个实现——连接器就不知道该选谁。
打个比方:
假设在a.h中写:
void foo(void) { return; }
即便使用了#ifndef指令,但是在b.c和d.c中分别包含a.h,函数foo的实现即“void foo(void) { return; }void foo(void) { return; }”仍然会各在b.c和d.c中出现一次,因为都是第一次包含。这样得话,函数foo就相当于实现了两次,从而让连接器无法处理。
只有inline函数才能写到头文件中。如果是非inline函数,你包含一次,就相当于实现一次,连接时,就会找到同一个函数的多个实现——连接器就不知道该选谁。
打个比方:
假设在a.h中写:
void foo(void) { return; }
即便使用了#ifndef指令,但是在b.c和d.c中分别包含a.h,函数foo的实现即“void foo(void) { return; }void foo(void) { return; }”仍然会各在b.c和d.c中出现一次,因为都是第一次包含。这样得话,函数foo就相当于实现了两次,从而让连接器无法处理。
更多追问追答
追问
我在头文件里只写了函数声明,函数实现是写在那些.c里的
为什么还是会重定义?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询