如何处理C中的多级包含?
我有第二个层次,那就是给我带来悲伤:如何处理C中的多级包含?,c,gcc,include,c-preprocessor,multi-level,C,Gcc,Include,C Preprocessor,Multi Level,我有第二个层次,那就是给我带来悲伤: Undefined first referenced symbol in file function2 /var/tmp//ccAPaWbT.o ld: fatal: symbol referencing errors. No output written to run collect2: ld returned 1
Undefined first referenced
symbol in file
function2 /var/tmp//ccAPaWbT.o
ld: fatal: symbol referencing errors. No output written to run
collect2: ld returned 1 exit status
主文件:
#include "functions02.c"
int main(){
int x = funcion2();
}
functions02.c文件:
#ifndef FUNCTIONS02_C
#define FUNCTIONS02_C
int funcion2();
#if __INCLUDE_LEVEL__ == 0
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include "functions01.c"
int main() {
return function2();
}
#endif
int function2()
return function1();
}
#endif
\ifndef函数02\u C
#定义函数02\u C
int function2();
#如果uu包括u级别uu==0
#包括
#包括
#包括
#包括“功能01.c”
int main(){
返回函数2();
}
#恩迪夫
int函数2()
返回函数1();
}
#恩迪夫
functions01.c文件:
#ifndef FUNCTIONS01_C
#define FUNCTIONS01_C
int funcion1();
#if __INCLUDE_LEVEL__ == 0
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main() {
return function1();
}
#endif
int function1()
return 10;
}
#endif
\ifndef函数01\u C
#定义函数01\u C
int function1();
#如果uu包括u级别uu==0
#包括
#包括
#包括
int main(){
返回函数1();
}
#恩迪夫
int function1()
返回10;
}
#恩迪夫
我假设可以使用\uu INCLUDE\u LEVEL\uu
或在gcc
编译上操作链接来修复此问题,但我找不到分叉变量
首先,如果不在外部头文件中添加函数,是否可以实现我想要的功能?
第二,正确的做法是什么
编辑:
我意识到我忘了给它们添加函数依赖项。也就是说,如果关闭,则不能通过将函数所使用的包含添加到在排除中扭曲的主函数旁边来排除它们 是的,您可以使用编译时标志(以及在代码中使用#if’s)来包括/排除代码的任何部分 在您的情况下,我假设您没有定义
\uuuuu INCLUDE\u LEVEL\uuuu
标志,因此链接器无法找到function2,因此出现错误
如果您定义它,您将有三个“main()”:-),它将再次失败。所以,您需要稍微修改一下代码
此外,包括“C”文件是不可取的,在实践中也不使用。我想你只是在尝试和学习,这很好 哎哟。你想在这里实现什么?我无法想象在许多情况下,我希望在我的C文件中进行条件编译(而不是在头文件中)。包括
.C
文件是非常不习惯的+1到@Gian-你想在这里做什么?这是一个链接器错误,不是编译,对吗?这与include无关。我在一个特定的系统上有非常严格的文件命名条件,我不能有头文件,甚至不能将c文件分成两个不同的文件,一个包含函数,另一个只是执行调用。谢谢你的警告,如果我有选择的话,我决不会做那样的事