声明与定义,重定义

  1. 变量(包括变量,函数)的使用过程需要声明,定义,使用。
    • 声明:告诉编译器目标对象存在,但是编译器不用管是否真实存在。
    • 定义:为变量开辟空间,则定义过后该变量就存在了全局唯一地址。
    • 使用:利用变量进行业务控制。
      其中定义只能进行一次,声明可以出现无数次,使用次数也没有限制。
      唯独对定义变量操作存在限制,因为定义是开辟内存的过程,如果可以多次定义,那只能说多次定义的不是同一个变量。
	extern int a; 	// 声明过程
	int a{0};  	// 定义过程
	a = 3;     	// 使用过程
  1. 头文件中仅对变量进行声明,当一个头文件被其他文件include后被展开,如果头文件中存在定义,那么该头文件被多次包含就会存在多次定义,就重复定义。
  • 解决重定义的方法
	int add(int a, int b){return a + b;} 	// 定义
  • 解决方法1:模板化
	template<typename T>
	T add(T a, T b){return a + b;}       	// 声明
  • 解决方法2:声明与定义分离
	// .h
	extern int a;

	//.cpp
	int a = 3;
  • 头文件重复包含, 但是作用域不能跨文件,限制的是同一个文件中被多次包含。
	// a.h
	#pragma once
	int a = 3;
	
	// a.cpp
	#include "a.h"
	
	// b.cpp
	#include "a.h"
- a.h文件中对变量a进行了定义,编译的是目标文件,定义的位置也是目标文件中。若头文件没有被include到源文件中,则该变量并没有实现定义过程。
- a.cpp中include头文件,参与了编译,则进行了一次定义。b.cpp中include头文件,再次参与了编译,则对变量a进行了重复定义。
  1. 源文件被编译成目标文件,是备用进行链接使用的,全局可见的。
posted @ 2022-09-26 19:52  flxx  阅读(60)  评论(0编辑  收藏  举报