【发布时间】:2010-07-27 01:47:43
【问题描述】:
我想在 SunOS 上编译时取消定义变量。因此,我试图把
#ifdef SunOS
#undef FOO
#endif
但它不起作用。问题出在#ifdef sunos 中?我应该声明它,还是编译器自己做?
问候 S.
【问题讨论】:
我想在 SunOS 上编译时取消定义变量。因此,我试图把
#ifdef SunOS
#undef FOO
#endif
但它不起作用。问题出在#ifdef sunos 中?我应该声明它,还是编译器自己做?
问候 S.
【问题讨论】:
我不知道有任何 Solaris 编译器会为您预定义 SunOS。
Sun 编译器列出了他们在“cc”手册页中 -D 选项描述下预定义的宏,包括 __sun 和 __SunOS_5_10(对于 uname -r of "5.10"),但不仅仅是简单的 @ 987654325@.
【讨论】:
您的编译器将包含许多预定义的变量。请参阅您的编译器文档以了解该列表是什么。
如果您想在多个(类 unix)平台上构建一个软件,请查看autoconf。它有一点学习曲线,但从长远来看,回报非常可观。
补充:
此外,您的编译器可能会列出预定义的宏。例如,使用 gcc,touch foo.h; cpp -dM foo.h 会生成一个所有的列表,在 OS X 上使用 gcc 会达到 119。但文档可能会给出一些关于该编译器的 recommended 宏的指示(但总的来说,autoconf 仍然是一种更好的技术)。
【讨论】:
这没什么错,cpp 接受那个片段就好了。您遇到了什么问题?
【讨论】: