打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
preprocessor 预处理程序和header guards
userphoto

2016.02.15

关注
preprocessor最好是被当作在编译之前运行的一个独立程序,它的目的是执行一些指令(directives)。

directives是一些特殊的说明(instructions),以#开头,新的一行结尾(而非;)

preprocessor:
1. include —— #include

2. macro defines,宏的定义
#define 指令可以用来创建宏。宏是一种规则,定义input如何被output顺序取代的
因此,宏分为object-like 和 function-like两种

function-like的就像函数一样工作,目的也很相似,现在用得较少,因为基本上都能被inline function取代。

object-like的形式有两种:
#define identifier substitution_text
例子:
#define MY_FAVORITE_NUMBER 9
结果是:遇到MY_FAVORITE_NUMBER时,自动把它当9使用

#define identifier
例子:
#define USE_YEN
结果是:当程序运行到遇到USE_YEN时,USE_YEN的部分移除,并replaced by nothing!
用途:conditional compilation有条件的编译

2
3
4
5
6
7
8
9
#define PRINT_JOE
 
#ifdef PRINT_JOE
cout << "Joe" << endl;
#endif
 
#ifdef PRINT_BOB
cout << "Bob" << endl;
#endif



2
3
#ifndef PRINT_BOB
cout << "Bob" << endl;
#endif

header guards:保证header只被include一次

#pragma once 在include的header的地方使用它,跟header guard的效果时一样的,只不过它不是official part of the C++ language,也并非所有的编译器都支持它,所以还是用header guard为好








本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
5.5 预处理指令 (Preprocessor Directives)
多个头文件的简单管理
C++ 预处理器
调试信息
#、##、#@在#define中的用法
CF1355C Count Triangles
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服