Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;函数的声明和定义不同,但它工作得很好 我正在编写一些C++代码 我发现了一件非常奇怪的事情 与下面的代码一样,即使函数的声明和定义不同,它也能很好地工作_C++_Gcc_G++ - Fatal编程技术网

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)