void
usage (cpp)
register const char *const *cpp;
{
(void) fprintf (stderr, *cpp++, program_name, cvs_cmd_name);
for (; *cpp; cpp++)
(void) fprintf (stderr, *cpp);
error_exit ();
}
我不明白为什么寄存器变量不在花括号内,而fprintf前面的这个(void)是什么?还有register const charconstcpp,我以前从没见过这样的东西
2条答案
按热度按时间xdnvmnnf1#
您“以前从未见过”的原因是,它使用的是原始的、历史的k&rcc版本的语法。你看到的一定是一些真实的旧c代码。我刚查了一下,ansic(c90)是1990年推出的,所以这个代码至少有30年左右的历史了。
如果需要处理历史上的c代码,我想这是需要知道的,否则你可以简单地忘记它。
这个
(void)
演员的意思和今天一样。llycmphe2#
这个
register
关键字是对编译器的一个提示,您希望该值保存在处理器上的专用寄存器中。这可以加快读写速度。然而,在现代编译器中,这种优化不仅没有必要,而且往往适得其反。它位于函数声明和块之间的原因是,在旧c(c90以前)中,您不会在参数旁边声明参数类型,而是在函数声明和块之间声明参数类型。
例如:
注意我什么都没做
argc
因为如果不显式定义类型,它将默认为int。你会比你想象的更经常看到这个。我在做ffmpeg的时候碰到过很多这样的人。
(void)cast防止未使用的参数警告/错误。我在使用低级回调函数处理portaudio时遇到过这种情况。