私は悲しみを与えている第2レベルのインクルードを持っています:
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
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
__INCLUDE_LEVEL__
これは、コンパイル時にリンクを使用または操作することで修正できると想定してgcc
いますが、フォークバリアントが見つかりません。
まず第一に、関数を外部ヘッダー ファイルに入れずに、探しているものを達成することは可能ですか? 第二に、それを行う正しい方法は何でしょうか?
編集: 関数の依存関係を追加するのを忘れていたことに気付きました。つまり、関数によって使用されるインクルードは、メイン関数のすぐ隣に追加することによって除外できません。