目录
extern定义与使用
extern告诉编译器在某一个cpp文件中,存在该函数或该全局变量的定义。
(1)声明外部函数;
(2)声明外部全局变量。
程序功能:输入半径,求面积。
main.cpp
#include "stdafx.h"
#include "stdio.h"
extern double get_area(double r);
extern int a; //测试外部全局变量
int main()
{
double r;
printf("enter r:");
scanf("%lf", &r);
double area = get_area(r);
printf("area:%lf", area);
return 0;
}
other.cpp
#include "stdafx.h"
int a = 10;
double get_area(double r)
{
double area = 3.14 * r * r;
return area;
}
一定要注意一点,extern不是告诉你在其他文件,而是告诉你在某个cpp文件中,比如在本文件中使用也是可以的。具体事例如下:
#include "stdafx.h"
#include "stdio.h"
extern int sum(int a, int b);
int main()
{
printf("sum:%d", sum(1, 2));
return 0;
}
int sum(int a, int b)
{
return a + b;
}
全局变量和函数重定义
全局变量和全局函数,在所有cpp文件中都不能重复。否则就会报重定义错误。请看下面这个函数名重复的例子:
main.cpp
#include "stdafx.h"
#include "stdio.h"
//extern double get_area(double r);
extern int a;
double get_area(double r)
{
double area = 3.14 * r * r;
return area;
}
int main()
{
double r;
printf("enter r:");
scanf("%lf", &r);
double area = get_area(r);
printf("area:%lf", area);
return 0;
}
other.cpp
#include "stdafx.h"
int a = 10;
double get_area(double r)
{
double area = 3.14 * r * r;
return area;
}
项目生成过程
(1)编译Compile是逐个cpp文件进行的。
没有顺序之分,谁先编译没有关系。你只要在cpp文件中声明extern,就可以调用它。但编译器并不会检车是否真的存在这个符号。
(2)在链接阶段。
检查所有的符号名是否重复;
检查所有的外部符号是否有定义。