c++宏定义、调用及编译过程等

本文探讨C++中的宏定义使用及其在编译过程中的作用,同时介绍了通过解决方案和文件夹的cmake目标视图来理解源码结构,源码结构包括'include'头文件夹和'src'源程序文件夹。
摘要由CSDN通过智能技术生成
/*
//c++编译器,对源文件的编译实质就是对每个cpp都分别生成.obj,包括main.cpp.
但是main.cpp和其他的.cpp文件是有区别的。其他的.cpp可以直接include到各自的头文件进行编译。
而main.cpp即便包含了所有的其他头文件,依然缺少main.cpp中函数及全局变量的定义,因为只能include头文件并不能include .cpp文件!
因此main.cpp在编译生成main.obj时,对于这些仅有声明的全局变量和函数仅仅是占个位置。
基于以上的编译过程,要想生成可执行文件,必须通过链接器,通过main.cpp中{}一行一行顺序的去查找这些函数或变量的真正定义所在的位置
然后链接起来生成main.exe。这样一来,main.cpp中的程序代码就可以调用所有的在其他cpp文件定义的函数或全局变量。
main.cpp中包含的头文件的功能就是给main.cpp中用到的外部的函数和变量一个声明,进而可以进行占位继续编译下去生成main.obj。

*/

#ifndef YOLO_V2_CLASS_HPP
//白色说明,此宏还没被定义过
//紫色说明这里是真的有效的宏定义
#define YOLO_V2_CLASS_HPP 
//可以这么理解,如果这个宏是紫色的,那么就代表这个宏在此或之前被定义了。

//宏定义的作用范围是本文件,但是如果被定义带头文件里,此头文件又被包含,那么宏定义对那些包含此头文件的源文件都有效。
//这里定义了YOLO_V2_CLASS_HPP 为 "空"。

/*以上可以防止本头文件被重复包含。我只是要用它防止重复包含,并没有其他用处,所以用空来定义,而不是一个实数。
可移植性好,语言特性层次的。

*/
/*以上的功能还可以用控制编译器的行为来防止重复包含,那就是在程序头文件前面加  #pr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值