C中函数调用的默认参数

Ped*_*rez 4 c parameters default function undefined-behavior

假设在一个文件中,我在同一项目的两个文件中有一些代码

file1.c
int func1(int a, int b, int c, bool d)
{
        /* function body */
}

file2.c
extern func1(int a, int b, int c);

/* function call */
func1(runtime1, runtime2, runtime3);
Run Code Online (Sandbox Code Playgroud)

bool d从 file2.c 调用时,值是什么?我知道这是非常糟糕的做法,但我正在维护旧代码并且有人这样做了,我只是想知道默认参数或者它是否依赖于实现。另请注意,bool此示例中是软件的 typedef,因为此特定项目不支持 C99。谢谢。!

Ere*_*ith 5

该值将是未定义的。调用 func1 时,其参数入栈。如果您使用少 1 个参数来调用它,则堆栈将比sizeof(bool)进程期望的字节少。这不会使您的程序崩溃,因为您的堆栈和堆“面向”,但如果您尝试访问d,您将访问堆栈上的任何值 -> 垃圾。