在代码块中构建项目时出错

时间:2013-07-01 13:27:51

标签: project linker-errors codeblocks

我在编写简单的cosole C Application时已经包含了代码块中的所有文件,但是当我定义宏时会出现此错误。我猜链接器无法链接项目中的所有文件.i项目test1.c中包含两个文件,文件中的test1.h代码如下所示。

file ::::: 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

每件事情都很好。这是什么原因?

1 个答案:

答案 0 :(得分:3)

表达式++a+( a+b)是未定义的行为,因为a的更新与其使用之间缺少sequence point。输出可以是任何东西。