警告:iso c99在宏名称后需要空格

时间:2014-04-02 08:14:45

标签: iphone ios7

我想定义大字符串表示宏中的多行文本。但是给出了错误。 我试过这个

#define kTerms&Conditions(message) [NSString stringWithFormat:@"ready to get:\"%@\".Find out how here.", message];

以上是演示文字,实际上非常冗长。但那也是警告。 我的文字就像

@"USER TERMS AND CONDITIONS

PLEASE READ THIS BEFORE ACCESSING THE SERVICE.  BY ACCESSING THE , YOU AGREE TO
BE BOUND BY THE TERMS AND CONDITIONS BELOW.  IF YOU DO NOT WISH TO BE BOUND BY 
THESE TERMS AND CONDITIONS, YOU MAY NOT USE THE SITE.

1. ALL PERSONS USING THIS  SITE AGREE TO REPORT (MANIFESTS) IN ACCORDANCE WITH
   49 U.S.C. SECTION 4909(C), 19  PART 122, 8 U.S.C. SECTION 1, AND 8 C.F.R.
   PARTS 217, 231, AND 251.

2. ELIGIBILITY FOR USE OF AND ACCESS TO THIS MCL/APIS SITE IS SUBJECT TO FINAL
   APPROVAL AND ACCEPTANCE BY UNIVERSAL.

以上是我想在Macro中显示的文字。 不允许使用非ASCII字符,从而产生错误。 请指导。

1 个答案:

答案 0 :(得分:1)

kTerms&Conditions 是有效的宏名称,它实际上是两个标识符,由&标记分隔。您收到错误的原因是编译器假定您需要:

#define kTerms &Conditions ...

但您还没有在宏名称和定义之间获得所需的分隔符。

我建议您使用kTermsAndConditions


更深入地说,C99 section 6.4.2对必须被视为标识符的内容设置了特定限制。它基本上是字母字符,数字和下划线,附带条件是它不能以数字开头。

实际上比这更复杂,因为标准允许UCN(主要是来自其他语言数组的字母字符)和"其他实现定义的字符&# 34;但如果你坚持上一段的指导原则,你就会安全。