预处理命令

typedef 类型重命名 和 #define 宏定义(1)

大憨熊 提交于 2020-03-02 05:57:45
http://www.blogjava.net/jasmine214--love/archive/2010/11/29/339307.html 在现实生活中,信息的概念可能是长度,数量和面积等。在C语言中,信息被抽象为int、float和double等基本数据类型。 从基本数据类型名称上, 不能够看出其所代表的物理属性 ,并且int、float和double为系统关键字,不可以修改。 为了解决用户自定义数据类型名称的需求,C语言中引入类 型重定义语句typedef ,可以为数据类型定义新的类型名称,从而 丰富数据类型所包含的属性信息 。 typedef的语法描述 : typedef 类型名称 类型标识符; 例如:typedef double LENGTH; typedef unsigned int COUNT; typedef 的主要应用有如下的几种形式 : 1) 为基本数据类型定义新的类型名 。例如: typedef unsigned int COUNT; typedef double AREA; 此种应用的主要目的,首先是丰富数据类型中包含的属 性信息,其次是为了系统移植的需要,稍后详细描述。 2) 为自定义数据类型(结构体、公用体和枚举类型)定义简洁的类型名称(在c++中没有这个必要了,因为直接可以使用类型名定义变量,前面不用加struct) 。例如: struct

预处理指令--宏定义

元气小坏坏 提交于 2020-03-02 05:44:11
预处理指令简介 •C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 •为了区分预处理指令和一般的C语句,所有预处理指令都以符号“#”开头,并且结尾不用分号 •预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 •C语言提供的预处理指令主要有:宏定义、文件包含、条件编译 宏定义分类 •宏定义可以分为2种: –不带参数的宏定义 –带参数的宏定义 一、不带参数的宏定义 •1.一般形式 •#define 宏名 字符串 •比如 #define ABC 10 •右边的字符串也可以省略,比如#define ABC 2.作用 •它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。 •接下来写个程序根据圆的半径计算周长 宏定义 #include <stdio.h> // 源程序中所有的宏名PI在编译预处理的时候都会被3.14所代替 #define PI 3.14 // 根据圆的半径计radius算周长 float girth(float radius) { return 2 * PI *radius; } int main ()

编译预处理命令define

自闭症网瘾萝莉.ら 提交于 2020-02-26 12:42:39
#include 包含指令 将一个源文件嵌入到当前源文件中该点处。 #include<文件名> 按标准方式搜索,文件位于C++系统目录的include子目录下 #include"文件名" 首先在当前目录中搜索,若没有,再按标准方式搜索。 #define 宏定义指令 定义符号常量,很多情况下已被const定义语句取代。 定义带参数宏,已被内联函数取代。 #undef 删除由#define定义的宏,使之不再起作用。 1 #define PI 3.14 2 #undef //取消之前已有的宏定义 条件编译指令 #if 和 #endif #if 常量表达式 //当“ 常量表达式”非零时编译 程序正文 #endif ...... 1 #if 0 //如果将0改为1表示要编译 2 ------------- 3 ------ 4 不编译 5 ---------- 6 #endif 条件编译指令 ——#else #if 常量表达式 //当“ 常量表达式”非零时编译 程序正文 #else //当“ 常量表达式”为零时编译 程序正文2 #endif #if !strcmp(char *a,char *b) //如果为真则编译,否则编译else #else #endif 条件编译指令 ——#elif #if 常量表达式1 程序正文1 //当“ 常量表达式1”非零时编译 #elif 常量表达式2

C++ 编译预处理

只愿长相守 提交于 2020-02-26 12:37:07
一、简介 1、编译预处理命令均以#开头,以回车符结束; 2、每条预处理命令独占一行; 3、可以出现在程序的任意位置,但通常置于源程序的开始; 4、在C++编译对源程序进行编译之前,先对程序中这些命令进行预处理; 5、C++预处理主要有三种: 文件包含、宏定义和条件编译 。 二、文件包含 1、格式 格式1:#include <filename> C++编译系统预定义的包含文件,这些文件在c++编译系统的include目录或其子目录中,通知预处理程序按系统规定路径检索文件。 格式2:#include “filename” 从当前工作目录开始查找,一般为自定义头文件。 2、预处理程序对源文件进行扫描时,将产生一个临时文件,用于存放预处理结果,当遇到#include “文件名”时,则将源文件复制到一个临时文件,并用指定的包含文件替代#include命令行。 3、 通常,头文件中声明的是共用的数据结构类型、函数原型、宏定义、全局变量 等。主要好处是对后续编程约定。 三、宏定义 1、不带参数的宏定义 #define 标示符 字符或字符串 2、带参数的宏 #define 宏名(参数表) 使用参数的字符或字符串 3、宏的作用域:从宏定义到本源程序文件结束。 终止宏作用域:#undef 宏名 如: #define PI 3.14 …… #undef PI 4、在宏定义时,宏名与左括号之间不能有空格,

【C语言零基础教程】- 预处理指令1 - 宏定义!

回眸只為那壹抹淺笑 提交于 2020-02-19 07:08:56
预处理指令简介 1. C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2. 为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3. 预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 4. C语言提供的预处理指令主要有: 宏定义 、 文件包含 、 条件编译 这一篇先介绍一下宏定义,宏定义可以分为2种:不带参数的宏定义 和 带参数的宏定义。 一、不带参数的宏定义 1.一般形式 #define 宏名 字符串 比如#define ABC 10 右边的字符串也可以省略,比如#define ABC 2.作用 它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。 接下来写个程序根据圆的半径计算周长 转存失败 重新上传 取消 在第4行定义了一个叫PI的宏,在编译预处理之后,第8行中的2 * PI *radius就会变成2 * 3.14 * radius。 输出结果: 3.使用习惯与注意 1> 宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误 2>

C语言的编译预处理

本秂侑毒 提交于 2020-02-17 09:27:42
C语言的编译预处理命令主要包括:宏定义、文件包含和条件编译。预处理命令均以“#”开始,命令的结尾没有分号,每条预处理命令必须占用单独一行。 1.宏定义 (1) 无参宏定义 无参宏定义的一般形式如下: #define 宏名 字符序列 如果源程序中使用了宏定义,编译预处理过程中,自动把源程序中出现的所有“宏名”替换为“字符序列”,这是一个纯文本替换,也称为宏替换。 例如下面定义了3个无参宏名: #define PI 3.14 #define R 10 #define AREA PI R R (2) 有参宏定义 有参宏定义的一般形式如下: #define 宏名(参数表) 字符序列 有参宏定义在进行宏替换时,源程序出现宏名的地方都使用字符序列替换,替换时使用宏引用中的实参去替换宏定义中的形参。 例如,如下定义了一个有参的宏名。 #define MUL(a,b) (a)*(b) 源程序中可以使用如下语句使用有参的宏: int x=3, y=4, z; z=MUL(x,y); 注意:通常需要在有参宏定义时,字符序列中参数要加上圆括号,以免进行宏替换时出现错误,如z=MUL(x+3,y-1) 10,进行宏替换后的语句为:z=x+3 y-1*10;。 2、文件包含 文件包含也是一种编译预处理命令,其作用是把被包含的文件的内容全部引入到使用文件包含命令的源程序文件中。文件包含命令有以下2种形式:

MySQL学习笔记(13)--预处理

只愿长相守 提交于 2020-02-03 17:42:03
·概念 prepare statement,一种预先编译SQL指令的方式 (然后命令执行) 预处理不同于直接处理,是将要执行的SQL指令先发送给服务器编译,然后通过指令执行 ●发送预处理: prepare 预处理名字 from '要执行的SQL指令' ●执行预处理: execute 预处理名字 预处理管理 ●预处理属于 会话级别 :即当前用户当次连接有效 (断开会被服务器清理掉) ●删除预处理: deallocate / drop 预处理名字 示例 #普通操作 select * from my_stuent ; #预处理操作:发送预处理 prepare p1 from 'select * from my_stuent' ; #预处理操作:执行预处理 execute p1 ; #删除预处理 deallocate prepare p1 ; ·作用 性能优化 效率优化 :同样的SQL不用每次都进行编译(编择耗时) 普通处理:每次都需要编译 预处理:编译一次 网络传输优化 :复杂的SQL指令只需要传输一-次 普通处理:每次都需要网络传输SQL指令 预处理:传输一次SQL指令,以后都是执行指令 安全:有效防止SQL注入(外部通过数据的特殊使用使得SQL的执行方式改变) 普通处理:直接发送给服务器执行(容易出现SQL注入) 预处理:发送的是结构,数据是后期执行传入(传入协议不一样,数据安全性高

G++命令

我只是一个虾纸丫 提交于 2020-01-28 02:25:46
gcc and g++分别是gnu的c & c++编译器。 从源代码到可执行文件的四步 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件,用到预处理器cpp。这一步称为preprocess。 2.将预处理后的文件转换成汇编语言文件.s,用到编译器egcs。这一步称为compile。实际上编译过程就是将高级语言转化成汇编语言的过程。 3.把汇编变为目标代码(机器代码)生成.o的文件,用到汇编器as。这一步称为assemble,实际上用到汇编器。 4.连接目标代码,生成可执行程序,用到链接器ld。这一步称为link,把很多个.o文件拼起来。 预处理 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里 面. 例子: gcc -E hello.c > pianoapan.txt gcc -E hello.c | more 编译生成汇编代码 -S 只激活预处理和编译,就是指把文件编译成为汇编代码。 例如 gcc -S hello.c ,生成.s的汇编代码。 汇编生成目标文件 -c 只激活预处理、汇编、编译,生成obj文件。从源文件到可执行文件宏观上分为编译、链接两个步骤。编译针对每个.c文件进行,为每个.c文件生成.o文件。链接将很多个.o文件组合成可执行文件。例如 gcc -c hello.c 将生成.o的obj文件。编译和链接分离的好处在于

C语言中define的用法

风格不统一 提交于 2020-01-27 10:24:26
define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便。 预处理命令以“#”号开头,如包含命令#include,宏定义命令#define等。一般都放在源文件的前面,它们称为预处理部分。 所谓预处理是指在进行编译之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。 宏的定义 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。 在C或C++语言中,“宏”分为有参数和无参数两种。 无参数宏定义 无参数宏就是不带参数,其定义的一般形式为:   #define 标识符 字符串   “标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。   例如:   #define PI 3.14 它的作用是指定标识符PI来代替常数3.14。在编写源程序时,所有用到3.14的地方都可用PI代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用3.14去置换所有的宏名PI,然后再进行编译。

计算机系统大作业

半城伤御伤魂 提交于 2020-01-27 00:59:48
计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机类 学   号 1180300412 班   级 1803004 学 生 yiguanghui 指 导 教 师 计算机科学与技术学院 2019年12月 摘 要 关键词:计算机系统、编译链接、异常控制流、虚拟内存 摘要:本文较详细地跟踪介绍了hello.c在Linux下的生命周期,从被程序员创建,到在系统上运行,然后输出简单的消息,最后终止。本文通过计算机系统课程中相关的知识来分析hello.c在Linux开发工具下经历预处理、编译、汇编、链接、加载、执行、终止、回收等过程和结果,跟踪程序的链接、进程创建及加载、虚拟内存转换、高速缓存访问、异常控制流、I/O管理等过程。 目 录 第1章 概述… - 4 - 1.1 Hello简介… - 4 - 1.2 环境与工具… - 4 - 1.3 中间结果… - 4 - 1.4 本章小结… - 4 - 第2章 预处理… - 5 - 2.1 预处理的概念与作用… - 5 - 2.2在Ubuntu下预处理的命令… - 5 - 2.3 Hello的预处理结果解析… - 5 - 2.4 本章小结… - 5 - 第3章 编译… - 6 - 3.1 编译的概念与作用… - 6 - 3.2 在Ubuntu下编译的命令… - 6 - 3.3 Hello的编译结果解析… - 6 - 3.4