"NSString*__unused aString"和"NSString __unused*aString"是否相同?

Sta*_*ich 3 objective-c clang

  1. NSString * __unused aStringNSString __unused * aString等价的,当他们的变量声明?

  2. - (void)aMethod:(NSString * __unused)aString- (void)aMethod:(NSString __unused *)aString等价的,当它们是Objective-C方法参数声明时?

  3. 如果答案是"是",我应该选择哪种形式正确?

在启用/禁用GCC_WARN_UNUSED_PARAMETERGCC_WARN_UNUSED_VARIABLE指令时,两种情况下的两种形式似乎都相同.

我没有找到任何澄清这一点的信息.


相关主题:

__unused标记行为/用法(GCC与目标C)

Phi*_*ade 6

两者之间存在差异.

当属性,, __unused出现在星号之前时,它会修饰整个声明列表的主要类型.所有变量都将"未使用":

__unused NSString *foo, *bar; // OK. All variables are unused in the statement. NSString __unused *foo, *bar; // OK

但是当放置后*,它只适用于第一个变量:

NSString * __unused foo, *bar; // Unused variable 'bar'

我更喜欢,NSString * __unused foo;因为我似乎更清楚,并且当我在一个语句中声明多个变量时,不会隐藏罕见的情况.

GCC属性语法参考提到它在第6.31:

在使用单个说明符和限定符列表的多个标识符的声明中,以逗号分隔的声明符列表中的声明符(不是第一个)之前可以出现属性说明符列表.这些属性说明符仅适用于它们出现在其声明符之前的标识符.例如,在

 __attribute__((noreturn)) void d0 (void),
     __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
      d2 (void) 
Run Code Online (Sandbox Code Playgroud)

noreturn属性适用于声明的所有函数; format属性仅适用于d1.