这是我的第一篇文章,所以如果我太含糊或提供了每个人都会直观地假设的信息,请告诉我。
我对写作很陌生C我只是想更好地了解预处理。我正在编写一个简单的程序,可以使用直接从控制台接收参数gcc -Wall -std=c99 -DSEED=argument
,其中我的参数应该是一个整数,或者如果-D
未定义,用户将输入它。
SEED 值仅用于srand()
。我很困惑为什么如果我放入一个代码我的代码将无法编译-DSEED=a
作为我的论点,如果我把-DSEED=1
它会编译。我收到“âaâ undeclared (first use in this function)”错误,并且真的不明白两者之间的区别。我以为#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
,因为它将它作为变量读取。
字符串化#define
您需要使用两步方法:
#define _STRINGIFY(s) #s
#define STRINGIFY(s) _STRINGIFY(s)
...
#define SEED 123
...
const char * pszSeed = STRINGIFY(SEED); /* 'pszSeed' would point to "123" form here on. */
如果您只想使用一个字符,只需通过以下方式访问它即可*pszSeed
or pszSeed[0]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)