gpt4 book ai didi

c - 为什么在 C 中声明函数名和函数 block 之间的变量编译为有效?

转载 作者:行者123 更新时间:2023-11-30 23:48:32 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Alternative (K&R) C syntax for function declaration versus prototypes

(5 个回答)


2年前关闭。




C lang FAQ我找到了以下代码:

void f(ipp)
int **ipp;
{
static int dummy = 5;
*ipp = &dummy;
}

我测试了用 -Wall -std=c11 -pedantic 编译它标志,并且它编译时没有警告或错误。这怎么可能——一个在函数名和它的块之间声明的变量?

编辑 :

发布几个小时后,经过多次回答,我发现该问题已作为重复问题关闭。我不同意关闭的决定。事实上,到目前为止,这里给出的重复问答和答案虽然大致正确,但并没有具体回答我的问题。

我的查询是关于出现在函数名称与其块之间的变量声明。好吧,这是原来的 K&R 风格,但我仍然觉得声明的位置令人震惊。阅读了描述 ANSI C89 的 K&R 第二版书籍后,我意识到以前的风格允许以不同的方式声明函数参数,但 AFAIK 那本书没有显示以这种方式进行的声明。也许确实如此,我已经忘记了。

我认为最好就这个特定问题单独提出一个问题,以防将来其他人被它抛出。我的问题应该代表任何可以阐明如何决定允许在这个奇怪的位置声明参数的人。您从 C 和所有受 C 启发的语言中得到的印象是,标记与其块大括号之间没有任何内容。我的问题提请注意一个重要的异常(exception),即使它已经 30/40 岁了,也应该强调并理解其基本原理。

编辑 2 :

我现在发现 C++ 语法允许在函数名和它的块之间有一个标记。即便如此,整个声明行介于两者之间的想法更为严重,值得向 C 新手指出他们可能会遇到的怪癖。我查过,K&R 第二版的书确实没有明确提到这一点。

最佳答案

它不是任何变量,而是函数参数。只是另一种编程风格,称为 K&R 风格。

一些 additional read在这一点上。

关于c - 为什么在 C 中声明函数名和函数 block 之间的变量编译为有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58857457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com