C 头文件、宏、编译问题
@2019-02-15
【小记】
> C 头文件的防重复包含是针对同一个源文件而言
原因:
#include 头文件就是一段代码的拷贝,头文件中若有类型定义等,重复包含就会造成编译错误,若无类型定义等不造成重复定义的,则无需防重复包含机制
防重包含机制:
#pragma once
#ifndef _MACRO_ #define _MACRO_ #endif
> 在头文件中不要定义变量、函数等是为了解决被多个源文件包含时出现重复定义
> 宏具有隐蔽性、最新性
在不同源文件中定义同名宏,不会出现任何问题
在同一源文件中多次定义同名宏,则宏为最后一次定义的值
使用场景:
公共头文件中依据宏值或宏定义不同,而对应不同的执行语句,则在不同源文件中包含该公共头文件,根据需要定义不同的宏使用相应的执行语句
使用案例:rt-thread中文件 <rtdbg.h> ,详见其开头说明部分
> 同一源文件中多次定义同名变量无错误,但只允许初始化一次
> 不同源文件中不允许定义同名变量
再牛逼的梦想也架不住傻逼似的坚持