预处理命令

转载自:http://www.cnblogs.com/kykuaileren/archive/2011/09/09/2172801.html

根据已放置在文件中的预处理指令来修改源文件的内容,预处理器会分析并执行所有的预处理指令,然后删除他们,得到一个仅包含C++语句的转换单元,预处理指令以“#”号开头

常见的预处理指令:

1、#include 包含头文件(头文件一般包含函数原型与全局变量)

形式常有下面两种

#include<iostream> 引用标准头文件,只搜索标准库头文件的默认目录

#include “myheader.h”

引用自定义的头文件,搜索正在编译的源文件所在的目录,找不到时再搜索包含标准库头文件的默认目录

2、#define 定义符号、宏

如:#define PI 3.1415925 // 定义符号常量PI为3.1415925,后面不加分号

在编译前,预处理器会遍历代码,在它认为置换有意义的地方,用字符串PI的定义值(3.1415925)来代替,在注释或字符串中的PI不进行替换

#undef删除#define定义的符号

如:

#define PI 3.14159265......// 之间所有的PI都可以被替换为3.14159265

#undef PI//之后不再有PI这个标识符

但是在C++中最好使用const来定义变量,如上面的定义可改为:

const long double PI=3.1415925;

两者比较下,前者没有类型的指定,容易引起不必要的麻烦,而后者定义清楚,所以在C++中推荐使用const来定义常量

#define的缺点:

1)不支持类型检查

2)不考虑作用域

3)符号名不能限制在一个命名空间中

3、#indef,#ifndef,#endif

#ifdef 如果宏被定义就进行编译
#ifndef 如果宏未被定义就进行编译
#endif
结束编译块的控制

4、#if,#else

#if 表达式非零就对代码进行编译
#else 作为if为假的选项对代码进行编译

5、#error

输出一个错误信息

6、#pragma

为编译程序提供非常规的控制流信息

时间: 2024-10-19 19:21:25

预处理命令的相关文章

#pragma预处理命令

#pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma指令: #pragma comment(lib,"XXX.lib") 表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样. #pragma comment(linker,"/ENTRY:main_function") 表示指定链接器选项/ENTRY:main_function #pragma once 表示这个文件只被包含一次 #pra

C语言第十一回合:预处理命令的集中营

  [学习目标]   1.         宏定义 2.         文件包括"处理 3.         条件编译 预处理命令:能够改进程序设计的环境.提高编程效率. 其功能主要有三种:宏定义.文件包括.文件编译. ANSI标准定义的C语言预处理指令预览表 A: 宏定义 (a)不带參数的宏定义 格式:#define标识符 字符串 如:#define PI 3.1415926 *标识符被称为:宏名 *在预编译时将宏名替换成字符串的过程为:宏展开. *#define 是宏定义命令 //求圆周长

IOS使用C#预处理命令,多种SDK共存

当我们使用Unity接 91,XY助手等等SDK时候. 我们需要使用[DllImport("__Internal")] 来声明一个C++的方法调用. 不同的SDK总会有不同的方法. 我习惯是写成 XYSDK类,  Baidu91SDK类里面封装的各种[DllImport("__Internal")]声明的方法 问题就来了, 如果我们发布XY SDK,而91 SDK的方法并没有放在xcode工程里面. 所以造成编译不通过.我们就需要把91 C++封装好的方法放入工程当

Unity预处理命令

我们经常在代码里面写Debug.Log()调试代码,游戏后门代码.这些代码在发布时无意义的,我们就需要慢慢的删除掉它们(很痛苦),有什么办法让它们在编译的时候并不加入编译代码中呢?  预处理命令..比如游戏准备发布电脑和安卓分别控制角色鼠标移动,双手控制移动并不需要复制两份项目分别开发,可以使用预处理命令进行分开编程! 下面介绍几个常用的预处理命令: UNITY_EDITOR    只在编辑器中编译 UNITY_ANDROID  只在安卓下编译 UNITY_STANDALONE_OSX  只在苹

C++预处理命令

预处理语句是由一系列和预处理相关的命令符组成的.预处理语句以#作为起始标记,其后紧跟预处理命令关键字,之后是空格,空格之后是预处理命令的内容.C++提供多种预处理功能,如宏定义,文件包括,条件编译等. #define 在这个教程的开头我们已经提到了一种预处理指令: #define ,可以被用来生成宏定义常量(defined constantants 或 macros),它的形式是: #define name value 它的作用是定义一个叫做name 的宏定义,然后每当在程序中遇到这个名字的时候

JDBC简介,MySQL连接,PreparedStatement 预处理命令,通配符

何须浅碧轻红色,自是花中第一流. -李清照的<鹧鸪天·桂花> JDBC 简介 我实验的MySQL数据库 配置连接MySQL驱动 数据库连接工具类 JDBC API Driver 接口 Connection 接口 DriverManager 类 Statement 接口 PreparedStatement 接口 CallableStatement 接口 ResultSet 接口 JDBC 数据库操作 测试连接示例 添加数据 查询信息 修改数据 删除数据 批处理 调用存储过程 JDBC 简介 JD

程序猿之--C语言细节15(预处理命令细节#error、运算符#和##、__FILE__、__LINE__)

主要内容:预处理命令细节#error.运算符#和##.__FILE__.__LINE__ #include <stdio.h> /* 包含这个头文件,并不是将其所有函数都链接进程序*/ /* ##运算符 */ #define MK_ID(n) i##n /* 表示将两个记号连接 */ int MK_ID(1), MK_ID(2),MK_ID(3); /* 预处理后变成int i1,i2,i3;*/ /* 定义多个type##_max函数,函数返回类型和参数类型用define决定 * 如GENE

volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域

 1.volatile:要求参数修改每次都从内存中的读取.这种情况要比普通运行的变量需要的时间长. #include <stdio.h> #include <stdlib.h> #include <time.h> void main() { time_t start, end; double res = 0; time(&start);  //获取时间,传递给start //volatile强制每次从内存读取 volatile int i; for (i =

C语言预处理命令详解

一  前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置. 预处理是C语言的一个重要功能,它由预处理程序负责完成.当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译. C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(#define).文件包含(#include).条件编译(#ifdef)等.合理使用预处理功能编

C语言预处理命令总结大全

C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANSI标准定义的C语言预处理程序包括下列命令: #define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma等.非常明显,所有预处理命令均以符号#开头,下面分别加以介绍. 一 #define 命令#d