/ / Sú ekvivalentné "NSString * __unused aString" a "NSString __unused * aString"? - cieľ-c, clang

Sú "NSString * __unused aString" a "NSString __unused * aString" ekvivalentné? - cieľ-c, clang

  1. NSString * __unused aString a NSString __unused * aString ekvivalentné, ak ide o premenné vyhlásenia?

  2. - (void)aMethod:(NSString * __unused)aString a - (void)aMethod:(NSString __unused *)aString ekvivalent, ak sú to deklarácie parametrov metódy C-C?

  3. Ak je odpoveď "áno", akú formu by som radšej uprednostnil?

Obe formy v obidvoch prípadoch zrejme pracujú rovnako pri zapínaní / vypínaní GCC_WARN_UNUSED_PARAMETER a GCC_WARN_UNUSED_VARIABLE smerníc.

Nenašiel som žiadne informácie, aby som to objasnil.


Relevantné témy:

__unused správanie / použitie vlajok (GCC s cieľom C)

odpovede:

6 pre odpoveď č. 1

Medzi týmito dvoma rozdielmi je rozdiel.

Keď atribút, __unused, objaví sa pred hviezdou, zdobí primárny typ celého zoznamu deklarácií. Všetky premenné budú "nepoužité":

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

Ale pri umiestnení po *, bude sa vzťahovať iba na prvú premennú:

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

Dávam prednosť NSString * __unused foo; pretože sa mi zdalo jasnejšie a nebudem skrývať zriedkavý prípad, keď deklarujem viacero premenných v jednom výpise.

Na Syntax atribútu GCC referenčné spomína, že v sekcii 6.31:

Zoznam atribútov Špecifikátor môžu objaviť tesne pred nulity (okrem prvej) v oddelené čiarkou zoznam veľkého v deklarácii o viac ako jeden identifikátor pomocou jediného zoznamu špecifikátory a kvalifikácia.Taký atribút špecifikátory sa vzťahujú len na identifikátor, pred ktorého nulity sa objavujú.Napríklad v

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

atribút noreturn sa vzťahuje na všetky funkcie deklarované; atribút formátu sa vzťahuje len na d1.


1 pre odpoveď č. 2

Tam "s tretia možnosť, ktorá sa chová podobne: __unused NSString *. To sa zdá byť častejšia na Github najmenej.

Spôsob vyhlásenia je podobne ako druhá možnosť v zozname iný štýl:

- (void)aMethod:(NSString *) __unused aString

Čítal som od sprava doľava. Šiel cez váš zoznam, čítať NSString * __unused ako "nevyužité smerník na inštanciu NSString" a ja som čítal NSString __unused * ako "smerník na inštanciu nepoužité NSString". Bývalý, t.j.#1 v zozname dáva najväčší zmysel ku mne.