gpt4 book ai didi

objective-c - "NSString * __unused aString"和 "NSString __unused * aString"等价吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:44 24 4
gpt4 key购买 nike

  1. NSString * __unused aStringNSString __unused * aString 是变量声明时,它们是否等价?

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

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

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

我没有找到任何信息来阐明这一点。


相关主题:

__unused Flag Behavior/Usage (GCC with Objective C)

最佳答案

两者是有区别的。

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


__unused NSString *foo, *bar;//好的。语句中未使用所有变量。
NSString __unused *foo, *bar;//好的

但是放在*之后,它只会作用于第一个变量:


NSString * __unused foo, *bar;//未使用的变量 'bar'

我更喜欢 NSString * __unused foo; 因为它对我来说更清晰并且不会隐藏我在一个语句中声明多个变量时的罕见情况。

GCC Attribute Syntax引用资料在第 6.31 节中提到了它:

An attribute specifier list may appear immediately before a declarator (other than the first) in a comma-separated list of declarators in a declaration of more than one identifier using a single list of specifiers and qualifiers. Such attribute specifiers apply only to the identifier before whose declarator they appear. For example, in

 __attribute__((noreturn)) void d0 (void),
__attribute__((format(printf, 1, 2))) d1 (const char *, ...),
d2 (void)

the noreturn attribute applies to all the functions declared; the format attribute only applies to d1.

关于objective-c - "NSString * __unused aString"和 "NSString __unused * aString"等价吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21153156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com