-1

単純な 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

すべてが正常に動作します。その理由は何ですか?

4

1 に答える 1

3

の更新とその使用の間にシーケンス ポイントがないため、式++a+( a+b)は未定義の動作です。出力は何でもかまいません。a

于 2013-07-01T13:30:39.953 に答える