這是我的第一篇文章,所以如果我太模糊或提供的信息,每個人都會直觀地假設,請讓我知道。Stringify C預處理
我很新,寫在C,我只是想更好地瞭解預處理。我在寫一個簡單的程序,可以直接從控制檯使用gcc -Wall -std=c99 -DSEED=argument
接受參數,其中我的參數應該是一個整數,或者如果未定義-D
,用戶將輸入它。
SEED值僅用於srand()
。我很困惑,爲什麼我的代碼不會編譯,如果我把-DSEED=a
作爲我的參數,而如果我把它編譯爲-DSEED=1
。我得到一個「未聲明的(首次在這個函數中使用)」的錯誤,真的不明白兩者之間的區別。我認爲#define
匹配變量類型與輸入,所以如果我把一個「a」#SEED將是一個字符,如果我把一個「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
時收到錯誤消息,因爲它是將它作爲變量讀取的。
其中之一,字符不能被分配一個字符串文字。 – chris