2013-06-13 15 views
8

Ho familiarità con lo #pragma mark sviluppo ogg-c/xcode/ios e che è utile per trovare sezioni di codice.#pragma objective-c: puoi avere più di un semplice 'segno'?

Tuttavia, mi chiedo se ci sono altre parole chiave oltre al "marchio". Mi piace, puoi fare #pragma qualcosa di nuovo? Grazie in anticipo!

+0

Sarebbe divertente se qualcuno venisse qui e avesse pubblicato 500 parole chiave non documentate che funzionavano effettivamente :) – doge

+0

Puoi fare cose come '// FIXME: alcuni testi che vuoi 'e' // TODO: qualcosa da fare' '# pragma once' – Popeye

+0

Sì, ce ne sono altri, come '#pragma clang diagnostic ...' – Wain

risposta

7

primo luogo, alcuni esempi:

  1. È possibile controllare la diagnostica:

    http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas

  2. E dallo stesso link:

    • clang supporta la Microsof t Funzione "#pragma pack" per il controllo del layout dei record. GCC contiene anche il supporto per questa funzionalità, tuttavia, dove MSVC e GCC sono clang incompatibili segue la definizione MSVC.

    • clang supporta la funzionalità Microsoft #pragma comment(lib, "foo.lib") per il collegamento automatico alla libreria specificata. Attualmente questa funzionalità funziona solo con il linker di Visual C++.

    • clang supporta la funzionalità Microsoft #pragma comment(linker, "/flag:foo") per l'aggiunta di flag di linker ai file oggetto COFF. L'utente è responsabile di assicurare che il linker capisca le bandiere.

    La seconda e la terza da tale elenco non si applicano al codice iOS, però.

  3. Wikipedia [link] dice che clang supporta anche #pragma once.

E, infine, ecco un link al clang API documentation per il codice pragma maneggevolezza. Puoi navigare da lì per vedere tutto il resto. In particolare, TokenKinds.def descrive tutti i gettoni accettate, quindi presumibilmente è completa:

#pragma unused 
#pragma GCC visibility [push/pop] 
#pragma pack [value/show/push/pop/etc/etc/etc] 
#pragma clang __debug parser_crash 
#pragma clang __debug captured 
#pragma ms_struct [on/off] 
#pragma align [native/natural/mac68k/power/reset] 
#pragma weak [identifier] 
#pragma weak [identifier = identifier] // alias 
#pragma redefine_extname [identifier identifier] 
#pragma STDC FP_CONTRACT 
#pragma OPENCL EXTENSION 
#pragma omp [...] 
#pragma detect_mismatch 
#pragma comment 

Il codice di analisi, trovato in ParsePragma.cpp, sembra indicare che non tutti sono implementati, anche se il front-end accetta loro, comunque.

0

Sì. È spesso usato per le direttive di attuazione definite, ma ci sono alcuni che sono definiti in C.

6.10.6 Pragma direttiva semantica 1

  1. Una direttiva al preprocessore della forma # pragma pp-tokensopt new-line dove il token preelaborazione STDC non immediatamente segue il pragma nella direttiva (prima di qualsiasi sostituzione macro) causa il comportamento dell'implementazione in un modo definito dall'implementazione .Il comportamento potrebbe causare errori di traduzione o causare il comportamento del convertitore o del programma risultante in un modo non conforme . Qualsiasi pragma di questo tipo non riconosciuto dall'implementazione viene ignorato.

  2. Se la pre-elaborazione gettone STDC abbia immediatamente segue pragma nella direttiva (prima di qualsiasi sostituzione macro), allora nessuna macro sostituzione viene effettuata sulla direttiva, e la direttiva deve avere una delle seguenti forme cui significati sono descritto altrove:

    #pragma STDC FP_CONTRACT on-off-switch

    #pragma STDC FENV_ACCESS on-off-switch

    #pragma STDC CX_LIMITED_RANGE on-off-switch

    `on-off-switch`: one of `ON OFF DEFAULT` 
    

risposta coperto esempi di Carl Norum di attuazione delle direttive definite bene. Per una lista completa, dovresti fare riferimento alla documentazione del tuo compilatore.

Problemi correlati