【问题标题】:Is there a preprocessor instruction to make a XCode build fail?是否有使 XCode 构建失败的预处理器指令?
【发布时间】:2011-12-15 00:31:24
【问题描述】:

是否存在使 XCode 构建失败的预处理指令? (或 pragma_mark 或其他)

例如,我为 3 个不同的环境开发了一个应用程序,其中包括要获取的几个 Web URL。到目前为止,我还不知道将用于生产环境的 URL,我想在我的代码中插入一条指令,以防止预期的构建在此环境中运行。

我的代码看起来像

#ifdef ENV1
...
#endif

#ifdef ENV2
...
#endif

#ifdef ENV3
#some_instruction_that_prevent_success_build
...
#endif

换句话说,我想要一个充当阻塞 TODO 的指令。

【问题讨论】:

  • #error 工作正常,但为什么它需要是预处理器指令?你可以很容易地使用@@@ TODO
  • 我的 2 个问题是我希望项目能够针对 ENV1 和 ENV2 编译和运行,并且仅针对 ENV3 失败,并且如果可以将错误消息自定义为我设置的错误消息而不是一般错误.例如,使用@@@ TODO,你会得到一个“Parse Issue - Unexpected '@' in program”,这可能会吓到客户。

标签: ios c xcode c-preprocessor


【解决方案1】:

错误预处理器指令是您所追求的。

#error "Danger, Will Robinson!"

【讨论】:

  • 它可以工作......但这似乎只是因为它是一个未知的预处理器指令。 :) 关于所有预处理说明文档,有什么好的在线资源可以推荐吗?
  • 我绝对确定 #error 一个已知的预处理器指令 - 它记录在 GCC C 预处理器 (cs.utah.edu/dept/old/texinfo/cpp/cpp.html#SEC37) 中。
  • @Dirty Henry:看看编译器在尝试编译时看到这个指令时会告诉你什么。
  • @Dirty Henry:#error 是 C 标准的一部分。 (但是,#warning 不是。)如果您想要预处理器指令列表,请获取 K&R 的副本或标准的副本 (open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf)
  • #error 在 1999 ISO C 标准的第 6.10.5 节中定义。它也在 1989 年的 ANSI 标准中,所以你的编译器会支持它,除非它非常旧(如果它那么旧,你还有其他问题)。如果#error 指令未被#if#ifdef#ifndef 跳过,则编译器不允许 成功。对于任何其他错误,编译器可以发出警告并继续。
猜你喜欢
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 2017-06-26
  • 2012-06-05
  • 2022-11-11
  • 1970-01-01
相关资源
最近更新 更多