1 首先函数只有声明没有定义,不调用它,程序是可以运行的
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void show(int a, int b) {
cout << a << "\t" << b << endl;
}
int sub(int a, int b);
int main(int argc, char** argv) {
int a = 10;
int b = 20;
show(a, b);
system("pause");
return 0;
}
运行
2 函数只有声明没有定义,调用它,程序不可运行
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void show(int a, int b) {
cout << a << "\t" << b << endl;
}
int sub(int a, int b);
int main(int argc, char** argv) {
int a = 10;
int b = 20;
sub(a, b);
system("pause");
return 0;
}
运行
这里尝试解释一下为什么会这样
首先程序的编译分为4个阶段
(1)预处理:将宏展开,将注释删掉,将.c/.cpp文件处理成.i文件;
(2)编译:检查语法错误,这里最耗时,将.i文件处理成.s文件(即汇编文件);
(3)汇编:将汇编文件处理成可重定位文件(.o);
(4)链接:将可重定位文件进行合并,得到最终的可执行文件。
也就是说如果调用函数,则是发生在链接阶段,编译器会找相应的函数体,但是没有定义,所以找不到,即报【无法解析的外部符号 "int __cdecl sub(int,int)" (?sub@@YAHHH@Z),该符号在函数 _main 中被引用】这样的错误;如果不调用,则没事。