С gcc
(и, возможно, с другими компиляторами) можно определить макрос вне исходного файла следующим образом:
c:\MinGW\bin\gcc.exe -DDEFINED_INT=45 foo.c -o foo.exe
Это определит DEFINED_INT
до 45, что можно увидеть, когдаКомпиляция
#include <stdio.h>
int main() {
printf("The define was: %d\n", DEFINED_INT);
return 0;
}
Скомпилированная foo.exe
будет выводить 45 при выполнении.
Теперь, что я не имею ни малейшего понятия, как передать строка * в кавычках вместо int.Таким образом, printf будет выглядеть примерно так:
printf("The define was: %s\n", DEFINED_STRING);
, а компиляция будет такой:
c:\MinGW\bin\gcc.exe -DDEFINED_STRING="foo bar baz" foo.c -o foo.exe
, но это не сработает, соответствующая строка будет
printf("The define was: %s\n", foo bar baz);
(то есть: без нужных кавычек).
c:\MinGW\bin\gcc.exe -DDEFINED_STRING=\"foo bar baz\" foo.c -o foo.exe
также не работает, поскольку gcc теперь пытается найти файлы bar и baz (сообщение об ошибке:
gcc.exe: bar: No such file or directory
gcc.exe: baz": Invalid argument
<command-line>:0:16: warning: missing terminating " character
Итак, как мне заставить компилятор вместе с cmd.exe делать то, что я хочу?