C 是否允许函数以不足的参数来调用自己

Does C++ allow function to call itself with insufficient parameters?

本文关键字:参数 自己 调用 是否 许函数 函数      更新时间:2023-10-16

我知道这个问题听起来很荒谬,但是我需要这里的专家确认,所以请让我解释一下情况:

我正在调试C 代码(很长,〜5000行),我发现了一些奇怪的东西,我试图简化如下:

myClass.h
class myclass
{
  ...
  void myfun(int p1, int p2, mytype *p3, bool isFirstTime);
  ...
}
=================================================================
myClass.cpp
...
void myclass::myfun(int p1, int p2, mytype *p3, bool isFirstTime)
{
  ...
  if (mycond[y] == false)
  {
    myarr[y] = p1;
    myfun(y, y, p3);   <--- here no bool parameter given     (*)
  }
  ...
}
...

可以编译和运行代码,而不会出现任何错误或警告(用于函数myfun)。但是,由于代码中有很多if-else,因此我不确定在此过程中是否真的调用了(*)的命令。

所以问题是:此行使用是否正确?如果正确,请向我解释或给我一些有关此"类型"功能的信息。如果不正确,为什么编译时没有警告或错误?

如果该函数没有默认参数,例如

void f(int x, int y, int z = 0) // we can call inside f(1,2) since z is a default parameter

然后否,它不能以更少的参数自称。但是,它可以调用具有更少参数的超载版本:

void f(int x, int y); // one version
void f(int x, int y, int z); // another overload, this can call the first overload f(1,2)

因此,请检查您的代码是否默认参数或过载版本。另外,默认参数应在标题文件中,实现文件不必再次指定它们。

是的,如果myfun被超载,则可能。因此,功能

myclass::myfun(int p1, int p2, mytype *p3);

需要存在,但是从您发布的片段中不可能知道这一点。