Вопрос

Кто-нибудь знает, как я могу узнать, какие встроенные / предопределенные макросы CL.exe? Например, для GCC Следующая командная строка будет перечислять все встроенные макросы компилятора

gcc -dM -E - </dev/null

РЕДАКТИРОВАТЬ: Я заинтересован в том, что похоже на GCC, то есть «спросить фактический компилятор».

Спасибо

Это было полезно?

Решение

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

Компилятор Microsoft C / C ++ позволяет использовать альтернативный интерфейс компилятора, используя переключатели командной строки / B1 и / Bx для файлов .C и .CPP соответственно. Модуль интерфейса командной строки CL.EXE передает список параметров на передний конец компилятора замены через переменную среды MSC_CMD_FLAGS. Этот список опций включает в себя -D-образные определения для некоторых предопределенных макросов.

Следующая тривиальная замена компилятора в интерфейсе печатает список параметров, переданных ему:

/* 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, чтобы вызвать его в качестве интерфейса компилятора, используя одно из следующих действий:

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__.

Другие советы

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

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

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

Попробуйте Preved Project. Отказ Они поддерживают базу данных предопределенных макросов для многих целевых платформ, хостовских платформ и компиляторов.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top