【C++】多文件项目extern的用法

目录

extern定义与使用

全局变量和函数重定义

项目生成过程


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)在链接阶段。

检查所有的符号名是否重复;

检查所有的外部符号是否有定义。

猜你喜欢

转载自blog.csdn.net/u013066730/article/details/84586033