0

私は悲しみを与えている第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いますが、フォークバリアントが見つかりません。

まず第一に、関数を外部ヘッダー ファイルに入れずに、探しているものを達成することは可能ですか? 第二に、それを行う正しい方法は何でしょうか?

編集: 関数の依存関係を追加するのを忘れていたことに気付きました。つまり、関数によって使用されるインクルードは、メイン関数のすぐ隣に追加することによって除外できません。

4

1 に答える 1