2013-07-01 3 views
-1

Я включил все файлы в кодовых блоках при создании простого приложения для приложения Cole, но эта ошибка возникает, когда я определяю макрос. Я предполагаю, что линкер не может связать все файлы в проекте. 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 || В function '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 

все прекрасно работает. Какая причина для этого?

+2

Что делать * вы * думаете? – Elazar

+0

Что вы не понимаете? – nouney

+1

Возможный дубликат [Может ли кто-нибудь объяснить эти неопределенные поведения (i = i ++ + ++ i, i = i ++ и т. Д.)] (Http://stackoverflow.com/questions/949433/could-anyone-explain-these -undefined-behaviors-iiiii-etc) –

ответ

3

Выражение ++a+(a+b) является неопределенным поведением, так как отсутствует sequence point между обновлением a и его использованием. Выход может быть любым.

+0

Это правильно, но не является объяснением. – Elazar

+0

@ Elazar Это было сделано только как быстрый ответ, в то время как вопрос закрывался как дубликат. Я разочарован тем, что избиратели до сих пор проголосовали за клоуны задайте вопрос как вне темы, что не имеет смысла. Это вопрос программирования, и его спросили и ответили бесчисленное количество раз на SO. –

+0

@PascalCuoq okay я извиняюсь, чтобы задать дублированный вопрос, но plzz сказать mee, что [++ b] также показывает неопределенное поведение. Becoz [] имеет больше приоритета, чем ++. я имею в виду a [b], если сначала оценивается, а затем ++ b –

Смежные вопросы