这是一个非常特别的问题,我以前从来没有意识到过.显然,我可以用C语言创建一个在传递参数方面与其函数原型不同的函数.唯一的要求是函数在编译时不能知道函数原型.
在我的最小示例中,我创建了以下头文件Test.h:
int Test(int);
我还创建了以下main.c:
#include <stdio.h>
#include "Test.h"
int main()
{
int a = Test(5);
int b = Test(5);
printf("%d", a);
}
当我使用此Test.c时,如预期的那样,编译时出错:
#include <stdio.h>
#include "Test.h"
void Test(void)
{
printf("HW\n");
}
如果我像这样编写Test.c,程序将被编译、链接并且是可执行的.当然,变量a有a
个看似任意的值.
#include <stdio.h>
void Test(void)
{
printf("HW\n");
}
例如,为什么可以链接这个程序,返回参数从何而来? 如果类似的事情在较大的代码中意外发生,这似乎也非常危险.
快速补充信息,当我在C++项目中使用相同的代码时,出现链接器错误.因此,如果我使用main.cpp和Test.cpp而不是main.c和Test.c.在这方面,左翼的处理方式似乎有所不同.但我也会感到惊讶,因为C++有函数重载.