Pregunta

¿Alguien sabe cómo podría averiguar qué son incorporadas / macros predefinidas de cl.exe? Por ejemplo, para gcc la siguiente línea de comandos mostrará una lista de todas las macros predefinidas del compilador

gcc -dM -E - </dev/null

EDIT:. Me interesa de una manera similar a la de GCC que es "pedir el compilador real"

Gracias

¿Fue útil?

Solución

Este método hace cantidad a pedir el compilador de la lista de macros predefinidas, sino que utiliza características no documentadas y proporciona sólo una lista parcial. Lo incluyo aquí para completar.

El compilador de Microsoft C / C ++ permite un compilador de front-end alternativa a ser invocada mediante el / B1 y / línea de comandos Bx cambia para archivos .c .cpp respectivamente. El módulo de interfaz de línea de comandos cl.exe pasa una lista de opciones para el front-end de reemplazo compilador a través de la variable de entorno MSC_CMD_FLAGS. Esta lista de opciones incluye definiciones de macros -D para algunas de las macros predefinidas.

Los siguientes reemplazo trivial compilador de front-end imprime la lista de opciones que se le pasan:

/* 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;
}

Compilar esto a un ejecutable llamado, por ejemplo, "MyC1.exe", asegurarse de que es visible en el PATH y diga cl.exe para invocarlo como el front-end del compilador usando uno de los siguientes:

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

Incluir otras opciones de línea de comandos como sea necesario para ver qué macros están predefinidos para ese conjunto de opciones.

En el aspecto de salida resultante de las opciones -D. Una lista de ejemplo es la siguiente. En la salida real de la lista será, con cada definición de macro precedido por -D separados por espacios, y otras opciones también presente.

_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  

Esta técnica parece que se incluyen la mayoría de las macros que dependen de las opciones de línea de comandos, pero excluye aquellos que siempre están definidos como __FILE__ y __DATE __.

Otros consejos

bandera /P preprocesador emitirá las macros actualmente activos en base a los valores de creación del proyecto. No estoy seguro de si es exactamente el equivalente de comando gcc que ha mostrado. La salida está en el archivo .I.

PREDEF proyecto . Mantienen una base de datos de macros predefinidas para muchas plataformas de destino, plataformas de acogida y cadenas de herramientas del compilador.

También tienen un guión que intenta descubrir todos los nombres predefinidos ya sean documentados o no. Funciona mediante la ejecución de la utilidad strings sobre el compilador, el procesamiento que para conseguir fichas candidato plausible, y tratando compilaciones de prueba para cada ficha. No es rápido, pero bastante bueno en descubrir un montón de macros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top