旧的C编译器在#ifndef #define上扼流圈

时间:2011-11-17 15:03:27

标签: c c-preprocessor

我正在尝试将一些相对现代的C代码移植到较旧的编译器中。

这个编译器(DICE)似乎在第一个头文件上扼杀并且第一次出现这个习语:

#ifndef SOMETHING
#define SOMETHING

...  

#endif /* SOMETHING */

它在标题的第二行死亡: DCPP: "../../code/someheader.h" L:2 C:0 Error:39 Syntax Error

更改为#define SOMETHING 1没有任何区别。

所以我真的有两个问题,我是否使用DICE使用了错误的选项,或者 C程序员在过去使用过ifndef-define等其他习惯用法?

参考文献:

2 个答案:

答案 0 :(得分:16)

如果是this C compiler,那么通过查看sources(src \ dcpp \ cpp.c),您可以看到换行符只包含回车符而不包含换行符。

如果你的行以CRLF结尾,那么当编译器在行的开头删除空格时,它不会在#之前删除换行,这是一个语法错误,因为预处理程序指令以{开头{1}}必须是该行中的第一个非空白字符。

答案 1 :(得分:3)

#if SOMETHING
#else




#endif

可能只适用于所有地方