预编译处理

简介: 预编译处理

1、#include指令(文件包含指令)


方式:


①#include <filename>:按标准方式搜索,文件位于系统目录的include子目录下,一般用于包含例如iostream之类的头文件


②#include "filename":首先在当前目录搜索,若没有,再按标准方式搜索,一般用于包含自定义头文件


2、#define与#undef指令


①#define的作用:


定义符号常量,例如:#define PI 3.14表示定义了一个符号常量PI的值为3.14

声明定义,例如:#define __HEAD_H__表示在此处定义了_HEAD_H


②#undef的作用:删除由#define定义的宏,使之失效


3、条件编译指令


只对满足条件的代码进行编译,将不满足条件的代码舍弃,以达到优化代码的目的



/*
当常量表达式constexpr_1非零时编译程序段codeSegment_1,
否则当常量表达式constexpr_2非零时编译程序段codeSegment_2,
若constexpr_1和constexpr_2都为零,则编译程序段codeSegment_3
*/
#if constexpr_1
    codeSegment_1
#elif constexpr_2
    codeSegment_2
#else
    codeSegment_3
#endif



/*
若标识符identifier已经被#define定义过,则编译程序段codeSegment_1,
否则编译程序段codeSegment_2
*/
#ifdef identifier
    codeSegment_1
#else
    codeSegment_2
#endif



/*
若标识符identifier未被#define定义过,则编译程序段codeSegment_1,
否则编译程序段codeSegment_2
*/
#ifndef identifier
    codeSegment_1
#else
    codeSegment_2
#endif


4、defined操作符


defined是一个操作符,不是指令,所以不需要以#开头,使用方式:defined(identifier)


作用:#ifndef __HEAD_H__等价于#if!defined(__HEAD_H__)


5、预编译处理在工程上的应用


通常在一个工程的头文件中会加上如下预编译指令,来防止重复包含和重复定义


//head.h
#ifndef __HEAD_H__
#define __HEAD_H__
codeSegment
#endif


相关文章
|
SQL Oracle 关系型数据库
SQL中,有效防止like的SQL注入,使用预编译SQL(?)写法
SQL中,有效防止like的SQL注入,使用预编译SQL(?)写法
178 0
|
5月前
预编译处理\条件编译指令
预编译处理\条件编译指令
21 2
|
5月前
预编译处理\带参宏指令
预编译处理\带参宏指令
25 2
|
11月前
|
存储 程序员 编译器
宏(预编译)详解
宏(预编译)详解
|
JavaScript Go
脚本的预编译
脚本的预编译
58 0
函数调用的预编译
函数调用的预编译
63 0
|
存储 自然语言处理 编译器
【C语言】程序环境和预编译
【C语言】程序环境和预编译
|
自然语言处理 编译器 C语言
C/C++程序的编译过程
C/C++程序的编译过程
222 0
C/C++程序的编译过程
|
SQL 存储 缓存
sql 预编译
sql 预编译
246 0
|
编译器
预编译的代码
预编译的代码
108 0