C++.自我学习.10

本文详细介绍了C++中的预处理指令,如条件编译(防止头文件重复),符号常量和常量变量,宏及其使用注意事项,内联函数与断言的区别,以及#error和#pragma的作用,包括行号(__LINE__)、文件名(__FILE__)等预定义符号的用法。
摘要由CSDN通过智能技术生成

C++.自我学习.10

1.包含防护(条件预处理指令):                  条件编译(组合语句),帮助调试程序

为了防止头文件重复包含,重复编译,重定义

总:

#ifndef  ,  #ifdef  ,  #define  ,  #endif  ,  #elif  ,  #else  ,  #if

例:

#ifndef  TIME_H   

#define  TIME_H

........

#endif  

可以理解为if语句,执行到#ifndef  TIME_H,判断time.h头文件是否定义,真则跳过,假则执行

例:

#if  0                    需要编译,0 -> 1

防止编译的代码

#endif

#if  DEBUG

cerr << Variable << x << endl;           为调试而设置的输出指令,在调试完成后被忽略

#endif

add:

1.编写这些语句时,头文件名全部大写,. 写成_

预处理指令

1.符号常量 和 常量变量

例:

1).#define 标识符  替换文本

#define  PI  3.14159

将所有出现PI的地方换成常量3.14159,可能会产生许多隐蔽性错误,不需要额外的内存

2).const常量变量,具有特定的数据类型

2.宏  (用符号定义的函数操作,可以用模板函数或内联函数取代)

特点:

1.含参数(首先在宏替换文本替换参数,然后把宏展开)

2.不含参(像符号常量一样被处理)

例:

定义:#define  宏标识符  宏替换文本

#define  CIRCLE_SIZE(X)  ( PI * (X) * (X) )

area = CIRCLE_SIZE ( 5 );   宏替换文本 将 替换宏标识符,再展开

宏展开:

area = ( 3.14159 * ( 5 ) * ( 5 ) )

注意:

1.宏不做参数检查,仅用作文本替换

2.定义宏,要用括号将参数括起来

3.用内联函数替代宏更好,可以提供函数数据类型检查服务

4,宏和内联实质一样,拷贝代码,减少函数调用开销

add:

断言(类似C++的异常处理)

<cassert>头文件中定义的宏

例:

assert( x<=10 )

如果前面程序中遇到的 x>10 ,打印包含行号和文件名的错误信息,终止程序

#define NDEBUG

其后的断言被忽略,不需要手动删除断言。当断言不需要时,插入就行

3.#error和 #pragma

1.#error打印一个和程序实现相关的信息 
#define SHOW_INFO
int main(void)
{
#ifndef SHOW_INFO
#error you must define SHOW_INFO marco.
#endif
}

2.#pragma  指示编译器完成一些特定的动作

例:

1.#pragma  message   仅仅代表一条编译信息,不代表程序错误

#if _M_IX86 >= 500   查看定义的宏有没有大于500,或者有时用作检查有没有定义宏

#pragma message("_M_IX86 >= 500")  

#endif

2.#pragma  once      告诉编译器头文件只包含一次

例:

#ifndef _GLOBAL_H_

#define _GLOBAL_H_

#pragma once

int g_value = 1;

#endif

3.#pragma  pack      指定内存对齐

4.运算符# , ##

1.#

例:

#define HELLO ( x ) cout<<hello ,  #x << endl ;

#运算符将替换文本的标记转换为带引号的字符串,空格隔开的字符串会在预处理中连接起来

2.##     连接两个标记

例:

#define  TOKENCONNECAT ( x , y )  x ## y

cout << TOKENCONNCAT("O","K");

5.预定义的符号常量  

__LINE__              显示行数

__FILE__              源文件名

__DATE__             源文件编译日期

__STDC__             是否符合ANSI/ISO C标准

__TIME__             源文件编译时间

__cplusplus   

注意:不能和#define一起使用,直接使用就可以

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成也萧何,败也萧何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值