The*_*'Or 3 c c11 function-definition
在C lang FAQ中,我找到了以下代码:
void f(ipp)
int **ipp;
{
static int dummy = 5;
*ipp = &dummy;
}
Run Code Online (Sandbox Code Playgroud)
我测试了使用-Wall -std=c11 -pedantic标志进行编译,并且没有警告或错误的情况下进行了编译。这怎么可能-在函数名称及其块之间声明一个变量?
编辑:
发布几小时后,经过一系列回答,我发现问题已重复存在。我不同意关闭的决定。实际上,到目前为止,重复的问答和此处给出的答案虽然大体上是正确的,但并未具体回答我的问题。
我的查询是关于在函数名称及其块之间出现的变量声明。好的,那是原始的K&R风格,但是我仍然觉得声明的位置令人震惊。阅读了描述ANSI C89的K&R第二版书后,我知道以前的样式允许使用不同的方法来声明函数参数,但是AFAIK那本书没有显示以这种方式进行的声明。也许是这样,我已经忘记了。
我认为,最好单独就这个特定问题提出一个问题,以防将来有人被它抛弃。我的问题应该代表任何可以阐明如何决定允许在此陌生位置声明参数的人。您从C语言和所有受C语言启发的语言中获得的印象是,令牌及其大括号之间没有任何联系。我的问题提请您注意一个重要的例外情况,即使该例外已存在30/40年,也应予以强调并理解其原理。
编辑2:
现在,我发现C ++语法允许在函数名称及其块之间插入标记。即便如此,整个声明行介于两者之间的想法更为严格,值得向C新手指出,因为他们可能会遇到一些怪癖。我已经检查过,《 K&R第二版》的确没有明确提及这一点。
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |