【问题标题】:unexpected '@' in program in test target测试目标中的程序中出现意外的“@”
【发布时间】:2015-10-21 09:57:35
【问题描述】:

我有如下声明的字符串常量。此代码编译器在正常的应用程序调试和发布目标中。但是在应用程序的测试目标(Ctrl + U)中,我在测试目标的程序中遇到了意外的“@”错误。使用 xcode 7。

模块已启用,如 this question 中的回答。

HeaderA.h

#define URL_A   "http://www.example.com/service"

HeaderB.h

#define URL_AC          @URL_A

这里出现错误,程序中出现意外的“@”。扩展自宏 @URL_AC

模块已启用,如 this question 中的回答。

在 .m 文件中用作,

NSURL * url = [NSURL URLWithString:URL_AC];

偶数声明

#define URL_AC      @"https://www.example.com/service?format=json"

得到“使用未声明的标识符 URL_AC”编译器错误。

【问题讨论】:

  • 请说明URL_AC 的使用情况。
  • 已在问题中更新。
  • 所以你有两个错误?
  • 我有两种不同的定义形式。第一个带有 C 字符串的形式得到@错误,第二个形式直接 @"" 定义我得到了第二个错误。所以我猜测试目标可能对字符串文字有一种误解!
  • 您需要使用stringification 才能在另一个宏中引用一个宏。第二个错误似乎表明HeaderB.h没有被导入。

标签: ios objective-c xcode xctest


【解决方案1】:

我发现了问题。 “定义”有一些#ifdef 宏。这是使用build settings 中的preprocessor declaration 控制的。在我的测试目标中,它没有被定义。当我定义它时,编译器会得到“定义”并且所有错误都消失了。

#if defined(TEST0)
#define URL0    "http://www.example.com"

#elif defined(TEST1)
#define URL1    "http://www.example2.com"

#endif

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多