2011-11-17 54 views
13

旧C编译器扼流器我试图将一些相对较新的C代码移植到较旧的编译器。#ifndef #define

此编译器(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

如果是[这个DICE编译器](http://www.obviously.com/amiga/),那么肯定会用于典型的包括守卫。 – tinman

+1

我的第一版(第21版)K&R在第208页介绍了#ifndef,所以它已经存在了一段时间。 –

+2

哦,这个问题带回了记忆!我甚至为共享软件版本付费。 :)除此之外,它应该工作,否则所有系统标题也会失败。 –

回答

16

如果是this C compiler然后通过查看sources(SRC \ DCPP \ cpp.c),你可以看到,新行仅包含回车符,而不是换行字符。

如果你有一行以CRLF结尾的行,那么当编译器在行的起始处剥去空白时,它不会在#之前剥离换行符,这是一个语法错误,因为以#开头的预处理器指令必须是该行中的第一个非空白字符。

+3

嘿,你打我一秒:)我会删除我的答案,享受代表。 – interjay

+0

@interjay:谢谢你,很体育:) – tinman

+0

谢谢大家,很高兴看到这么多的C精明和Amiga受污染的人。:-) –

3
#if SOMETHING 
#else 




#endif 

可能只是工作处处

+0

aha!将尝试 –

+0

谢谢!这不是它,但可能有助于另一个编译器。 –