sú
NSString * __unused aString
aNSString __unused * aString
ekvivalentné, ak ide o premenné vyhlásenia?sú
- (void)aMethod:(NSString * __unused)aString
a- (void)aMethod:(NSString __unused *)aString
ekvivalent, ak sú to deklarácie parametrov metódy C-C?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ď č. 1Medzi 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.