Question

Quelqu'un sait comment pourrais-je savoir quels sont BUILTIN / macros prédéfinies de cl.exe? Par exemple, pour gcc la ligne de commande suivante liste toutes les macros du compilateur de BUILTIN

gcc -dM -E - </dev/null

EDIT:. Je suis intéressé d'une manière similaire à celle de gcc qui est "demander au compilateur réel"

Merci

Était-ce utile?

La solution

Cette méthode ne montant à demander au compilateur de la liste des macros prédéfinies, mais il utilise des fonctionnalités non documentées et ne fournit qu'une liste partielle. Je l'inclus ici pour être complet.

Le compilateur Microsoft C / C permet une alternative frontal du compilateur pour être appelé en utilisant la ligne de commande / B1 et / Bx passe pour les fichiers .c et .cpp respectivement. Le module d'interface de ligne de commande cl.exe passe une liste d'options à l'extrémité avant du compilateur de remplacement par la variable d'environnement MSC_CMD_FLAGS. Cette liste d'options comprend des définitions de macros -D pour certaines des macros prédéfinies.

Le compilateur remplacement trivial suivant imprime front-end sur la liste des options qui lui sont transmises:

/* MyC1.c */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *p;

    if ((p = getenv("MSC_CMD_FLAGS")) != NULL)
        printf("MSC_CMD_FLAGS:\n%s\n", p);

    if ((p = getenv("MSC_IDE_FLAGS")) != NULL)
        printf("MSC_IDE_FLAGS:\n%s\n", p);

    return EXIT_FAILURE;
}

Compile ce à un exécutable nommé, par exemple, « MyC1.exe », assurez-vous qu'il est visible dans le PATH et dire cl.exe d'invoquer comme le compilateur frontal en utilisant une des options suivantes:

cl /B1MyC1.exe AnyNameHere.c  
cl /BxMyC1.exe AnyNameHere.cpp  

Inclure d'autres options de ligne de commande que nécessaire pour voir quelles macros sont prédéfinies pour cet ensemble d'options.

Dans le regard de sortie résultant pour les options -D. Une liste d'exemple est donné ci-dessous. Dans la sortie réelle de la liste sera séparés par des espaces, chaque définition de macro précédée par -D, et d'autres options également présents.

_MSC_EXTENSIONS  
_INTEGRAL_MAX_BITS=64  
_MSC_VER=1600  
_MSC_FULL_VER=160030319  
_MSC_BUILD=1  
_WIN32  
_M_IX86=600  
_M_IX86_FP=0  
_MT  

Cette technique semble inclure la plupart des macros qui dépendent des options de ligne de commande, mais exclut ceux qui sont toujours définis comme les __FILE__ et __DATE __.

Autres conseils

/P drapeau préprocesseur émettra les macros actuellement actifs sur la base des paramètres de construction du projet. Je ne sais pas si elle est exactement l'équivalent de commande gcc vous avez indiqué. La sortie est dans le fichier .I.

Essayez le projet predef . Ils maintiennent une base de données de macros prédéfinies pour de nombreuses plates-formes cibles, les plates-formes d'accueil et toolchains du compilateur.

Ils ont aussi un script qui tente de découvrir tous les noms prédéfinis ou sans papiers. Il fonctionne en exécutant l'utilitaire strings sur le compilateur, le traitement que pour obtenir des jetons candidats plausibles, et d'essayer des compilations de test pour chaque jeton. Pas rapide, mais assez bon à découvrir beaucoup de macros.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top