C++;函数的声明和定义不同,但它工作得很好 我正在编写一些C++代码 我发现了一件非常奇怪的事情 与下面的代码一样,即使函数的声明和定义不同,它也能很好地工作
有人知道这怎么可能吗?C++;函数的声明和定义不同,但它工作得很好 我正在编写一些C++代码 我发现了一件非常奇怪的事情 与下面的代码一样,即使函数的声明和定义不同,它也能很好地工作,c++,gcc,g++,C++,Gcc,G++,有人知道这怎么可能吗? build cmd:g++main.cpp foo.cpp // main.cpp #include <iostream> char foo(); int main() { foo(); } // foo.cpp #include <iostream> void foo() { std::cout << "I'm foo" << std::endl; } //main.cpp #包括 char-fo
build cmd:
g++main.cpp foo.cpp
// main.cpp
#include <iostream>
char foo();
int main() {
foo();
}
// foo.cpp
#include <iostream>
void foo() {
std::cout << "I'm foo" << std::endl;
}
//main.cpp
#包括
char-foo();
int main(){
foo();
}
//foo.cpp
#包括
void foo(){
std::cout编译是成功的,因为您没有使用main()中的返回类型,它可以工作。
另外,由于您没有使用函数的返回类型,它忽略了函数的返回类型。
它也基于编译规则
链接器可能不允许并引发错误。
我正在使用VS2019,我得到了以下链接错误(错误LNK2019:未解析的外部符号)。不幸的是,“工作良好”是的可能结果之一。这很可能有效,因为x86调用约定在寄存器中传递整数返回值(即,rax
)。谢谢你们,我会检查你们提到的内容为什么???…因为你们不喜欢main()中的返回类型,它是有效的。它也是基于编译规则的。但当我编译时,出现以下错误:1>Temp.obj:error LNK2019:未解析的外部符号“char\uu cdecl foo(void)”(?foo@@YADXZ)在函数\u main 1>中引用了已定义且可能匹配的符号提示:1>“void\u cdecl foo(void)”(?foo@@YAXXZ)