Это мой первый пост, поэтому, если я слишком расплывчат или даю информацию, которую все интуитивно предполагают, пожалуйста, дайте мне знать.
Я новичок в написании на C и просто пытаюсь лучше понять предварительную обработку. Я пишу простую программу, которая может принимать аргументы либо непосредственно из консоли, используя gcc -Wall -std=c99 -DSEED=argument
, где мой аргумент должен быть целым числом, либо, если -D
не определен, пользователь вводит его.
Значение SEED просто используется в srand()
. Я очень запутался, почему мой код не скомпилируется, если я вставлю -DSEED=a
в качестве аргумента, а если я вставлю -DSEED=1
, он скомпилируется. Я получаю сообщение об ошибке "ааа необъявлено (первое использование в этой функции)" и действительно не понимаю разницы между ними. Я думал, что #define
соответствует типу переменной с вводом, поэтому, если я введу «a», #SEED будет char, а если я вставлю «1», #SEED будет int.
Если SEED не определен, я использую команду #ifndef SEED
, и это работает хорошо. Я думаю, что я должен «упорядочить» ввод SEED
, а затем проверить, является ли он целым числом или нет. После прочтения некоторых статей в Интернете я пытаюсь использовать:
#ifndef SEED
//code
#else
#define TO_STRING( input ) #input
char c;
c = TO_STRING( SEED )
//Then I was going to use c to figure out if it was an int.
#endif
Это не работает, и любой, кто может указать на любые неправильные представления, которые, по вашему мнению, у меня могут быть, будут очень признательны.
РЕДАКТИРОВАТЬ. Итак, я понял, почему я получал сообщение об ошибке при попытке -DSEED=a
, потому что он читал его как переменную.