2010-07-26 28 views
0

我想在SunOS上编译时取消定义变量。因此,我试图把ifdef&solaris

#ifdef SunOS 
#undef FOO 
#endif 

但它不起作用。问题出在#ifdef sunos上?我应该宣布它,还是编译器自己做?

问候 S.

回答

3

你的编译器将包括一些预定义变量。查看你的编译器文档来找出那个列表是什么。

如果您试图制作一个可在多个(unixlike)平台上构建的软件,请查看autoconf。它有一点学习曲线,但从长远来看,它会带来非常大的收益。

此外: 此外,您的编译器可能有一种列出预定义的宏的方法。例如,使用gcc,touch foo.h; cpp -dM foo.h产生了一个所有的列表,其中包括119个在OS X上使用gcc。但是文档可能会给出该编译器的推荐的宏的一些指示(但autoconf仍然是一种更好的技术这一般)。

+0

C/C++缺少一个指令:#ifndef(:: int sum(vector )),或其他。结果,数百万开发者不得不维护数百万行hacky autoconf垃圾。解决这个问题将导致全球和平。 – 2015-02-02 14:56:37

-1

没有什么不对,cpp接受这个片段就好了。你看到什么问题?

6

我不知道Solaris的任何编译器为您预先定义SunOS

Sun编译器列出他们在“抄送”手册页预定义下的-D选项说明宏,包括__sun__SunOS_5_10(为“5.10”使用uname -r),但不只是普通SunOS