分享

preprocessor 预处理程序和header guards

 Tech-d 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为好








    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多