2013-06-13 1 views
8

Je suis familier avec #pragma marque le développement de l'objectif-c/xcode/ios et qu'il est utile pour trouver des sections de code.#pragma objectif-c: pouvez-vous avoir plus que juste 'marquer'?

Cependant, je me demande s'il existe d'autres mots-clés autres que 'mark'. Comme, pouvez-vous faire #pragma somethingelse? Merci d'avance!

+0

Serait drôle si quelqu'un est venu ici et a publié 500 mots-clés non documentés qui ont effectivement travaillé :) – doge

+0

Vous pouvez faire des choses comme '// FIXME: du texte que vous voulez» et «// TODO: quelque chose à faire» '# pragma une fois'' – Popeye

+0

Oui, il y en a d'autres, comme '#pragma clang diagnostic ...' – Wain

Répondre

7

d'abord, quelques exemples:

  1. Vous pouvez contrôler le diagnostic:

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

  2. Et à partir du même lien:

    • clang soutient la Microsof t Fonction "#pragma pack" pour contrôler la disposition d'enregistrement. GCC contient également un support pour cette fonctionnalité, cependant là où MSVC et GCC sont incompatibles, clang suit la définition de MSVC. Clang prend en charge la fonctionnalité Microsoft #pragma comment(lib, "foo.lib") pour la liaison automatique avec la bibliothèque spécifiée. Actuellement, cette fonctionnalité ne fonctionne qu'avec le lieur Visual C++. Clang prend en charge la fonctionnalité Microsoft #pragma comment(linker, "/flag:foo") pour ajouter des indicateurs de liens aux fichiers objet COFF. L'utilisateur est responsable de s'assurer que l'éditeur de liens comprend les indicateurs.

    Les deuxième et troisième de cette liste ne sera pas applicable à votre code iOS, cependant.

  3. Wikipedia [link] dit que clang supporte #pragma once, aussi.

Et enfin, voici un lien vers le clang API documentation pour le code de gestion pragma. Vous pouvez naviguer à partir de là pour voir tout le reste. En particulier, TokenKinds.def décrit tous les jetons acceptés, on peut donc supposer qu'il est complet:

#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 

Le code d'analyse syntaxique, trouvé dans ParsePragma.cpp, semble indiquer que tous d'entre eux sont mis en œuvre, même si le frontal accepte eux, cependant.

0

Oui. Il est souvent utilisé pour les directives définies de mise en œuvre, mais il y a un peu qui sont définis dans C.

6.10.6 directive Pragma Sémantique 1

  1. Une directive de pré-traitement de la forme # pragma pp-tokensopt new-line où le jeton de pré-traitement STDC ne pas immédiatement suivre pragma dans la directive (avant tout remplacement de macro) provoque la mise en œuvre de se comporter d'une manière définie par l'implémentation .Le comportement peut provoquer l'échec de la traduction ou provoquer un comportement non conforme du programme ou du programme résultant. Un tel pragma qui n'est pas reconnu par l'implémentation est ignoré.

  2. Si le STDC jeton prétraiter ne suit immédiatement pragma dans la directive (avant tout remplacement macro), alors pas de remplacement macro est effectuée sur la directive, et la directive doit avoir l'une des formes dont les significations suivantes sont décrit ailleurs:

    #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` 
    

réponse de Carl Norum exemples de mise en œuvre des directives couvertes définies ainsi. Pour une liste complète, vous devriez vous référer à la documentation de votre compilateur.

Questions connexes