__unused Flag Behavior/Usage (GCC with Objective-C)

前端 未结 2 474
暖寄归人
暖寄归人 2020-12-14 06:56

I just now learned about the __unused flag that can be used when compiling with GCC and the more I learn about it, the more questions I have...

Why does this compile

2条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-14 07:26

    As of Xcode 7.3.1, there is currently no difference between:

    - (void)foo:(NSInteger)__unused myInt;// [syntax 1]
    - (void)foo:(NSInteger __unused)myInt;// [syntax 2]
    - (void)foo:(__unused NSInteger)myInt;// [syntax 3]
    

    But the following doesn't work:

    - (void)foo:(NSInteger)myInt __unused;// [doesn't work]
    

    For usage on this, Apple recommends first syntax. (information was partially taken from this answer)

    But there is difference between:

    __unused NSString *foo, *bar;  // [case a] attribute applies to foo and bar
    NSString *foo __unused, *bar;  // [case b] attribute applies to foo only
    
    NSString * __unused foo, *bar; // [case c] attribute applies to foo only
    NSString __unused *foo, *bar;  // [case d] attribute applies to foo and bar
    CFStringRef __unused foo, bar; // [case e] attribute applies to foo and bar
    

    If we want __unused to apply to all, syntax [a] is my personal best as it leaves no ambiguity.

    If we want __unused to apply to one, syntax [b] is my personal best as it leaves no ambiguity.

    The latter three solutions are acceptable but confusing in my opinion. (information was partially taken from this answer)

提交回复
热议问题