我想在SunOS上编译时取消定义变量。因此,我试图把ifdef&solaris
#ifdef SunOS
#undef FOO
#endif
但它不起作用。问题出在#ifdef sunos上?我应该宣布它,还是编译器自己做?
问候 S.
我想在SunOS上编译时取消定义变量。因此,我试图把ifdef&solaris
#ifdef SunOS
#undef FOO
#endif
但它不起作用。问题出在#ifdef sunos上?我应该宣布它,还是编译器自己做?
问候 S.
你的编译器将包括一些预定义变量。查看你的编译器文档来找出那个列表是什么。
如果您试图制作一个可在多个(unixlike)平台上构建的软件,请查看autoconf。它有一点学习曲线,但从长远来看,它会带来非常大的收益。
此外: 此外,您的编译器可能有一种列出预定义的宏的方法。例如,使用gcc,touch foo.h; cpp -dM foo.h
产生了一个所有的列表,其中包括119个在OS X上使用gcc。但是文档可能会给出该编译器的推荐的宏的一些指示(但autoconf仍然是一种更好的技术这一般)。
没有什么不对,cpp
接受这个片段就好了。你看到什么问题?
我不知道Solaris的任何编译器为您预先定义SunOS
。
Sun编译器列出他们在“抄送”手册页预定义下的-D
选项说明宏,包括__sun
和__SunOS_5_10
(为“5.10”使用uname -r),但不只是普通SunOS
。
C/C++缺少一个指令:#ifndef(:: int sum(vector)),或其他。结果,数百万开发者不得不维护数百万行hacky autoconf垃圾。解决这个问题将导致全球和平。 –
2015-02-02 14:56:37