微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将函数作为参数传递给同一函数

如何解决将函数作为参数传递给同一函数

我尝试在sololearn代码操场上运行以下代码,并且工作正常。有人可以细分,为什么它起作用?

我不知道它是如何工作的,因为函数 add()尚不接受任何参数,但是它接收add()函数作为参数并两次计算总和。

#include <stdio.h>

int add(){
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d",a+b);
    return 0;
}
int main(){
    add(add());
    return 0;
}

解决方法

int add()是过时的样式,表示接受 any 参数(不同于C ++,它的意思是(void))。这是旧的标准“ K&R”样式的剩余部分,在该样式中分别指定了参数。 C暂时仅允许函数声明符使用这种形式。

6.11.6函数声明符
带空括号的函数声明符的使用(不是原型格式的参数 类型声明符)是过时的功能。
6.11.7函数定义
将函数定义与单独的参数标识符和声明列表一起使用 (不是原型格式的参数类型和标识符声明符)是过时的功能。

当函数 definitions 的列表为空时,适用以下条件(C11 6.7.6.3/14):

约束
/-/
标识符列表仅声明函数参数的标识符。一个空的 作为该函数定义一部分的函数声明器中的列表指定 函数没有参数。

因此,该代码违反了约束,因此无效C。您具有函数定义,但显然已将其视为具有参数。 gcc在这里似乎不合规,因为即使使用最大警告和-pedantic,我也没有得到诊断消息。

关于“它起作用”的原因,请参见What must a C compiler do when it finds an error?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。