Как узнать 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
утилита над компилятором, обрабатывая это, чтобы получить правдоподобные токены-кандидаты и пробовать тестовые компиляции для каждого токена. Не быстро, но довольно хорошо на открывать серии макросы.