Как узнать cl.встроенные макросы exe

кто-нибудь знает, как я могу узнать, какие из них cl.встроенные / предопределенные макросы exe? Например, для gcc в следующей командной строке будут перечислены все встроенные макросы компилятора

gcc -dM -E - </dev/null

EDIT: меня интересует способ, похожий на gcc, который "спрашивает фактический компилятор".

спасибо

4 ответов


этот метод равнозначен запросу компилятором списка предопределенных макросов, но он использует недокументированные функции и предоставляет только частичный список. Я включаю его сюда для полноты картины.

компилятор Microsoft C/C++ позволяет вызывать альтернативный интерфейс компилятора с помощью параметров командной строки /B1 и / Bx.с и. cpp файлы соответственно. Модуль интерфейса командной строки CL.exe передает список параметров в интерфейс компилятора замены через Переменная среды MSC_CMD_FLAGS. Этот список параметров включает определения макросов-D для некоторых предопределенных макросов.

следующий тривиальный компилятор замены front-end распечатывает список переданных ему опций:

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

скомпилируйте это в исполняемый файл с именем, например, " MyC1.exe", убедитесь, что он виден в пути и сообщите CL.exe, чтобы вызвать его в качестве компилятора front-end с помощью одного из следующих:

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

включить другую командную строку параметры, необходимые для просмотра макросов, предопределенных для этого набора параметров.

в результирующем выходе найдите параметры-D. Ниже приведен примерный список. В фактическом выводе список будет разделен пробелом, каждому определению макроса будет предшествовать-D,а также другие параметры.

_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  

этот метод, по-видимому, включает большинство макросов, зависящих от параметров командной строки, но исключает те, которые всегда определены, такие как __FILE__ и __DATE__.


получить информацию у источника!

http://msdn.microsoft.com/en-us/library/b0084kay%28v=VS.90%29.aspx


/P флаг препроцессора выдаст текущие активные макросы на основе параметров сборки проекта. Я не уверен, что это точно эквивалент команды gcc, которую вы показали. Выход находится в .


попробовать проект predef. Они поддерживают базу данных предопределенных макросов для многих целевых платформ, хост-платформ и цепочек инструментов компилятора.

у них также есть скрипт, который пытается обнаружить все предопределенные имена, документированные или нет. Он работает, запустив strings утилита над компилятором, обрабатывая это, чтобы получить правдоподобные токены-кандидаты и пробовать тестовые компиляции для каждого токена. Не быстро, но довольно хорошо на открывать серии макросы.