config = cmd_ln_init(NULL, ps_args(), TRUE,
"-hmm", MODELDIR "/en-us/en-us",
"-lm", MODELDIR "/en-us/en-us.lm.bin",
"-dict", MODELDIR "/en-us/cmudict-en-us.dict",
NULL);
我第一次看到变量 - MODELDIR
- 在字符串旁边 - "/en-us/en-us"
。这怎么可能?我在C / C ++教程书中从未见过这样的东西!
如果我想搜索有关此内容的更多信息,我应该使用哪些关键字进行搜索?
答案 0 :(得分:4)
MODELDIR
是宏扩展为字符串。 C将相邻的字符串连接成单个字符串*,因此如果MODELDIR
为#define
d到"/foo/bar"
,则会导致以下函数调用:
config = cmd_ln_init(NULL, ps_args(), TRUE,
"-hmm", "/foo/bar/en-us/en-us",
"-lm", "/foo/bar/en-us/en-us.lm.bin",
"-dict", "/foo/bar/en-us/cmudict-en-us.dict",
NULL);
*)所以,写
"Hello, " "World!"
与
完全相同"Hello, World!"