Iphone 警告:iso c99要求宏名称后面有空格

Iphone 警告:iso c99要求宏名称后面有空格,iphone,ios7,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

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

#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.
上面是我想在宏中显示的文本。 不允许使用非ASCII字符,这将导致错误。
请指导。

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

#define kTerms &Conditions ...
但是宏名称和定义之间没有必需的分隔符

我建议您使用
kTermsAndConditions


更深入地说,
C99第6.4.2节
对必须被视为标识符的内容进行了具体限制。它基本上是字母、数字和下划线,但有一个限制条件,它不能以数字开头


事实上,它比这要复杂一点,因为该标准允许ucn(主要是来自其他语言数组的字母字符)和“其他实现定义的字符”但是,如果您坚持上一段中的指导原则,您将是安全的。

是的,谢谢,但上面提到的文本仍然不适合。不允许使用非Ascii字符,这会导致错误。@iPhone6,我不知道您在说什么。在使用
kTerms&Conditions
时,我会遇到与您在“普通”C99编译器中遇到的错误完全相同的错误,当您将其更改为
kTermsAndConditions
时,该错误会得到修复。因此,这就是这个特殊问题的答案。一旦你解决了另一个问题,它应该是一个单独的问题,更详细地说明发生了什么。因此,这不是一个公告板或问题解决网站,我们在一个问题中逐步解决您的所有问题,这是一个问答网站-一问一答:-)我认为您误解了这个问题或没有正确地处理它。我在问题中提到了我想在宏观上设定的文本,也提到了其中面临的问题。您刚才说的是错误,而不是问题的解决方案。解决方案是从宏名称中去掉“与”-kTerms&Conditions应该是kTermsAndConditions。编译器正在抱怨“&”-它可能不是宏名称的一部分,因此编译器认为宏已经结束,因此它说宏名称和&…之间应该有一个空格。你只能对宏使用字母数字,AppleDocs这样说。此外,您还在编译时宏上定义运行时函数。你不能这样做。