2015-10-16 3 views
0

Я хочу скомпилировать программу c под разными именами. В главном файле, у меня есть следующий макрос:Расширение динамического макроса внутри функции printf

#ifndef EXECUTABLE_NAME 
#define EXECUTABLE_NAME   "defaultname" 
#endif 

При компиляции с помощью GCC, я использую -D переключатель, чтобы определить этот макрос (в том, что право термин?):

$ gcc main.c -DEXECUTABLE_NAME="newname" 

Я не знаете, если -D работает нормально или нет, потому что, когда я пытаюсь сделать что-то вроде кода ниже ... он терпит неудачу ... Я не могу сказать, прикручен ли ключ -D или синтаксис использования макроса внутри printf() неправильная функция:

printf("no or invalid arguments. usage: %s [0,255]\n", EXECUTABLE_NAME); 

Я получаю эту ошибку:

main.c:48:57: note: in expansion of macro ‘EXECUTABLE_NAME’ 
    printf("no or invalid arguments. usage: %s [0,255]\n", EXECUTABLE_NAME); 

Любые предложения?

ответ

1

Это работает, и вы можете видеть, что , потому что ошибки. Который, кстати, потому что вы определяете свой макрос неправильно в командной строке, это то, как вы цитируете строки в макросе:

$ gcc main.c -DEXECUTABLE_NAME='"newname"' 

И это сказал, это даже не требуется. Путь к исполняемому файлу всегда является вашим первым аргументом: *argv.

+0

Предоставляет ли 'argv [0]' имя исполняемого файла, например. 'myapp' или что-то вроде'./myapp' или даже '/ path/to/myapp'? Мне нужно только чистое исполняемое имя приложения. –

+0

Попробуйте и посмотрите, это специфичная для платформы. – Blindy

+0

точно, вот почему я попробовал hardway –

-1

Я попробовал эту программу с целым числом, которое является следующим

#ifndef EXECUTABLE_NAME 
#define EXECUTABLE_NAME 2 
#endif 

int main() 
{ 
    printf("%d",EXECUTABLE_NAME); 
} 

, а затем напечатала НКУ main -DEXECUTABLE_NAME = 1, и она работает, как изменяется значение 1. Это проблема с тип данных 'string', который вы используете?

Смежные вопросы