【问题标题】:ifdef & solarisifdef和solaris
【发布时间】:2010-07-27 01:47:43
【问题描述】:

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

#ifdef SunOS
#undef FOO
#endif

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

问候 S.

【问题讨论】:

    标签: c solaris


    【解决方案1】:

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

    Sun 编译器列出了他们在“cc”手册页中 -D 选项描述下预定义的宏,包括 __sun__SunOS_5_10(对于 uname -r of "5.10"),但不仅仅是简单的 @ 987654325@.

    【讨论】:

      【解决方案2】:

      您的编译器将包含许多预定义的变量。请参阅您的编译器文档以了解该列表是什么。

      如果您想在多个(类 unix)平台上构建一个软件,请查看autoconf。它有一点学习曲线,但从长远来看,回报非常可观。

      补充: 此外,您的编译器可能会列出预定义的宏。例如,使用 gcc,touch foo.h; cpp -dM foo.h 会生成一个所有的列表,在 OS X 上使用 gcc 会达到 119。但文档可能会给出一些关于该编译器的 recommended 宏的指示(但总的来说,autoconf 仍然是一种更好的技术)。

      【讨论】:

      • C/C++ 缺少指令:#ifndef(::int sum(vector)) 或其他。结果,数十万开发人员不得不维护数百万行骇人听闻的 autoconf 垃圾。解决这个问题将导致全球和平。
      【解决方案3】:

      这没什么错,cpp 接受那个片段就好了。您遇到了什么问题?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-14
        • 1970-01-01
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        相关资源
        最近更新 更多