我正在尝试将一些相对现代的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等其他习惯用法?
参考文献:
答案 0 :(得分:16)
如果是this C compiler,那么通过查看sources(src \ dcpp \ cpp.c),您可以看到换行符只包含回车符而不包含换行符。
如果你的行以CRLF结尾,那么当编译器在行的开头删除空格时,它不会在#
之前删除换行,这是一个语法错误,因为预处理程序指令以{开头{1}}必须是该行中的第一个非空白字符。
答案 1 :(得分:3)
#if SOMETHING
#else
#endif
可能只适用于所有地方