在看 dropbox 的 json11 源码,json11 是 dropbox 公司开源的 C++解析 json 的库。
地址在 https://github.com/dropbox/json11
其中有一处的写法很奇怪(json11.cpp, line632 - line651)
https://github.com/dropbox/json11/blob/master/json11.cpp#L651
while (1) {
i--;
data.push_back(parse_json(depth + 1));
if (failed)
return Json();
ch = get_next_token();
if (ch == ']')
break;
if (ch != ',')
return fail("expected ',' in list, got " + esc(ch));
ch = get_next_token();
(void)ch;
}
这里的 get_next_token 返的的是一个 char 类型,即 ch 就是一个普通的 char 类型
我的问题是,最后一行,单独的一行( https://github.com/dropbox/json11/blob/master/json11.cpp#L651 )
(void)ch;
是什么意思?感觉没有任何作用啊?
谢谢!
1
timonwong 2015-10-08 16:55:44 +08:00 1
没有任何作用,这个是绕过 compiler/linter 警告的( unused variable )
当然,对部分编译器,使用这行代码也无意义,仍然要给你报 unused variable 警告 |
2
acros 2015-10-08 16:58:43 +08:00
参考楼上说的歪头想了一下。
clang 对于未使用变量是不是挺敏感来着··· 很多我在 vs 下出 warning 的,它都直接扔 error |
3
wshcdr 2015-10-08 16:59:01 +08:00
没什么作用的
|
5
legendlee 2015-10-08 18:12:14 +08:00 via Android
如果不加,编译器会抛出警告。
|
6
Cloudee 2015-10-08 20:49:10 +08:00
ch = get_next_token();
(void)ch; 里面这个 ch 确实什么情况都用不到了,为啥不直接 get_next_token(); 呢 |