単純な cosole C アプリケーションを作成しているときにすべてのファイルをコードブロックに含めましたが、マクロを定義するとこのエラーが発生します。リンカはプロジェクト内のすべてのファイルをリンクできないと思います.iプロジェクトには2つのファイルが含まれています.test1.cとtest1.hファイルのコードは以下のとおりです..
ファイル :::::test1.c
#include<stdio.h>
void m();
#include "test1.h"
#define DS==1
int main(){
return 0;
}
ファイル::::test1.h
#ifndef TEST1_H_INCLUDED
#define TEST1_H_INCLUDED
#if DS ==1
void m(){
printf("hello DS==1");
}
#eliif DS==2
void main(){
printf("hello DS==2");
}
#endif
#endif // TEST1_H_INCLUDED
エラーはそれです
**> E:\Documents\Myprojects\My C PROj\Te\test1.c||関数「main」内:|
E:\Documents\Myprojects\My C PRoj\Te\test1.c|8|warning: implicit declaration of function 'm'| obj\Debug\test1.o||In function `main':| E:\Documents\Myprojects\My C PRoj\Te\test1.c|8|undefined reference to `m'| ||=== Build finished: 1 errors, 1 warnings ===|**
条件付きマクロを削除すると、次のコードで簡単にコンパイルできます。
ファイル:::::test1.c
#include<stdio.h>
#include "test1.h"
int main(){
m();
return 0;
}
ファイル:::::test1.h
#ifndef TEST1_H_INCLUDED
#define TEST1_H_INCLUDED
void m(){
printf("uncoditional macro");
}
#endif // TEST1_H_INCLUDED
すべてが正常に動作します。その理由は何ですか?