c/c++语言开发共享为什么我可以通过带有太多参数的指针调用函数?

说我有这个function:

int func2() { printf("func2n"); return 0; } 

现在我声明一个指针:

 int (*fp)(double); 

这应该指向一个带有double参数并返回int的函数。

func2没有任何参数,但是当我写的时候:

 fp = func2; fp(2); 

2只是一个任意数字),func2`被正确调用。

这是为什么? 我为函数指针声明的参数数量没有意义吗?

    是的,有意义。 在C(但不是在C ++中)中,使用一组空括号声明的函数意味着它需要一个未指定数量的参数。 执行此操作时,您将阻止编译器检查参数的数量和类型; 这是C语言由ANSI和ISO标准化之前的延续。

    未能使用正确数量和类型的参数调用函数会导致未定义的行为 。 如果您通过使用void的参数列表显式声明您的函数采用零参数,那么当您分配错误类型的函数指针时,编译器将给出警告:

     int func1(); // declare function taking unspecified parameters int func2(void); // declare function taking zero parameters ... // No warning, since parameters are potentially compatible; calling will lead // to undefined behavior int (*fp1)(double) = func1; ... // warning: assignment from incompatible pointer type int (*fp2)(double) = func2; 

    您需要显式声明参数,否则您将获得未定义的行为:)

    需要了解更多c/c++开发分享为什么我可以通过带有太多参数的指针调用函数?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     int func2(double x) { printf("func2(%lf)n", x); return 0; } 

      以上就是c/c++开发分享为什么我可以通过带有太多参数的指针调用函数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980367.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐