У меня сложная проблема. Я хотел бы подделать C содержимое исходного файла в соответствии с командной строкой компилятора. Например (с помощью VC):
Если я использую командную строку
cl -c -E -Dfoo=rice test.c
Я хочу получить фактическое C содержимое (после предварительной обработки):
char *s = "rice";
Если я использую командную строку
cl -c -E -Dfoo=ball test.c
Я хочу получить фактическое C содержание исходного файла:
char *s = "ball";
Теперь находим решение ...
ПЕРВЫЙ ПОПРОБ:
// test.c
#define STRNAME(n) #n
char *s = STRNAME(foo);
- Не повезло. Независимо от того, какой foo определен в командной строке, я всегда получаю
char *s = "foo"; // Oh no!
ВТОРАЯ ПОПРОБУЙТЕ (самое близкое изображение, но все еще многословно):
// test.c
#define STRNAME(n) #n
char *s = foo;
На этот раз я должен подробно изменить командную строку:
cl -c -E -Dfoo=STRNAME(rice) test.c
Теперь я получаю
char *s = "rice";
Есть ли способ помочь мне выбраться из этого многословия?
Кстати: я действительно не люблю вводить кавычки в аргументы команды (сделать их частью argv[x]
, потому что вы не сможете писать такие командные строки надежно и переносимо в Windows CMD и Linux Bash - Я думаю.