文章分类 -  C语言深度剖析

1

#和##运算符使用解析
摘要:1. #运算符 (1)#运算符用于在预编译期将宏参数转换为字符串 2. #运算符在宏中的妙用 结果是: 3. ## 运算符 (1)## 运算符用于在预编译期粘连两个符号 【利用##定义结构类型】 一般的定义结构体 可能你会想到另一种方式 最优方式,利用宏来扩展【高效整洁】 单步编译的后可发现 gcc 阅读全文

posted @ 2018-04-27 23:33 arabain 阅读(270) 评论(0) 推荐(0)

#pragma 预处理分析
摘要:1. #pragma简介 (1)#pragma是编译器指示字,用于指示编译器完成一些特定的动作 (2)#pragma所定义的很多指示字是编译器和操作系统特有的 (3)#pragma在不同的编译器间是不可移植的 预处理器将忽略它不认识的#pragma指令 两个不同的编译器可能以两种不同的方式解释同一条 阅读全文

posted @ 2018-04-26 22:21 arabain 阅读(78) 评论(0) 推荐(0)

#error和#line
摘要:1. #error的用法 (1) #error用于生成一个编译错误的消息,并停止编译 (2)用法: #error message 注:message不需要用双引号包围 #error编译指示字用于自定义程序特有的编译错误消息 类似的,#warning 用于生成编译警告,但不会停止编译 2. #erro 阅读全文

posted @ 2018-04-26 21:51 arabain 阅读(134) 评论(0) 推荐(0)

条件编译使用分析
摘要:1. 基本概念 (1)条件编译的行为类似于C语言中的 if...else (2)条件编译是预编译指令命令,用于控制是否编译某段代码 2. #include的困惑 (1)#include的本质是将已经存在的文件内容嵌入到当前文件中 (2)#include的间接包含同样会产生嵌入文件内容的动作 问题: 阅读全文

posted @ 2018-04-17 22:47 arabain 阅读(145) 评论(0) 推荐(0)

宏定义与使用分析
摘要:1. 定义宏常量 (1)#define 定义宏常量可以出现在代码的任何地方 (2)#define从本行开始,之后的代码都可以使用这个宏常量 2. 定义宏表达式 (1)#define表达式给有函数调用的假象,却不是函数 (2)#define表达式可以比函数更加强大 (3)#define表达式比函数更容 阅读全文

posted @ 2018-04-16 22:36 arabain 阅读(213) 评论(0) 推荐(0)

编译过程简介
摘要:1. 初始编译器 广义的编译器 你可能不知道的事… 2. 预编译:指令示例——gcc –E file.c –o file.i (1)处理所有的注释,以空格代替 (2)将所有的#define删除,并且展开所有的宏定义 (3)处理条件编译指令#if、#ifdef、#elif、#else、#endif ( 阅读全文

posted @ 2018-04-16 20:06 arabain 阅读(192) 评论(0) 推荐(0)

优先级和类型转换分析
摘要:1.易错的优先级 【编程实验】 2. C语言隐式类型转换 (1)算术运算式中,低类型转换为高类型 (2)赋值表达式中,表达式的值转换为左边变量的类型 (3)函数调用时,实参转换为形参的类型 (4)函数返回值,return表达式转换为返回值类型 编译的Bug吗? 【隐式类型转换带来的困惑】 阅读全文

posted @ 2018-04-16 14:59 arabain 阅读(137) 评论(0) 推荐(0)

++和--操作符分析 好
摘要:1. ++和—操作符对应的两条汇编指令 (1)前置++或--:变量自增(减)1,然后取变量值 (2)后置++或--:取变量值,然后变量自增(减)1 【实例分析】一对令人头疼的兄弟 2. C标准对++和—运算符的规定 (1)C语言中只规定了++和—对应指令的相对执行次序(即两条汇编指令的前后顺序是有规 阅读全文

posted @ 2018-04-16 14:12 arabain 阅读(123) 评论(0) 推荐(0)

位运算符分析
摘要:1. C语言中的位运算符——直接对bit位进行操作,效率最高 & 按位与 | 按位或 ^ 按位异或 ~ 按位取反 << 左移 >> 右移 & 按位与 | 按位或 ^ 按位异或 ~ 按位取反 << 左移 >> 右移 2. 左移和右移注意点 (1)左操作数必须为整型类型:char和short被隐式转换为 阅读全文

posted @ 2018-04-16 11:06 arabain 阅读(204) 评论(0) 推荐(0)

逻辑运算符分析
摘要:1. 有趣问题:逻辑运算符&&,||和!真的很简单吗? 【实例分析】初探逻辑运算符 2. 程序中的短路 (1)||从左向右开始计算 ①当遇到为真的条件时停止运算,整个表达式为真 ②所有条件为假时表达式才为假 (2)&&从左向右开始计算 ①当遇到为假的条件时停止运算,整个表达式为假 ②所有条件为真时表 阅读全文

posted @ 2018-04-16 10:28 arabain 阅读(132) 评论(0) 推荐(0)

单引号与双引号
摘要:1. 单引号和双引号 (1)C语言中单引号用来表示字符字面量(是个数值) (2)C语言中双引号用来表示字符串字面量(是个指针) ①'a'表示字符字面量(97),在内存中占用1个字节,'a'+1表示'a'的ASCII码加1,即'b' ②"a"表示字符串字面量(是个指针),在内存中占2个字节了,"a"+ 阅读全文

posted @ 2018-04-16 10:14 arabain 阅读(14527) 评论(0) 推荐(0)

接续符和转义符
摘要:1. 接续符的意义:C语言中的接续符(\)是指示编译器行为的利器 【实例分析】初探接续符 2. 接续符的使用 (1)编译器将反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行 (2)在接续单词时,反斜杠之后不能有空格,反斜杠下一行之前也不能有空格 (3)接续符适合在宏定义代码块时使用 (因为C语言中规 阅读全文

posted @ 2018-04-16 09:41 arabain 阅读(145) 评论(0) 推荐(0)

注释符号
摘要:C语言中的符号 1. 似是而非的问题 (1)下面的注释是正确的吗? 【实例分析】初探注释规则 2. 注释规则 (1)编译器在编译过程删除注释,但是不是简单的删除而是使用空格替换整个注释 (2)编译器认为双引号括起来内容都是字符串,字符串字面量中的//和/*…*/不代表注释符号 (3)/*…*/型注释 阅读全文

posted @ 2018-04-13 10:44 arabain 阅读(345) 评论(0) 推荐(0)

enum和typedef分析
摘要:1. enum枚举类型 1.1 使用方法 (1)enum是C语言中的一种自定义类型 (2)enum值是可以根据需要自定义的的整型值 (3)第一个定义的enum值默认为0。 (4)默认情况下的enum值是在前一个定义值的基础上加1 (5)enum类型的变量只能取定义时的离散值 1.2 枚举类型的特殊意 阅读全文

posted @ 2018-04-13 10:02 arabain 阅读(682) 评论(0) 推荐(0)

struct 和 union 分析
摘要:1. struct的小秘密 (1)C语言中的struct可以看作变量的集合 (2)struct的问题——空结构体占用多的内存?(C语言的灰色地带,不同的编译器具有不同的解释) 【实例分析】空结构体的大小 2. 结构体与柔性数组 (1)柔性数组即数组大小待定的数组 (2)C语言中可以由结构体产生柔性数 阅读全文

posted @ 2018-04-12 20:15 arabain 阅读(89) 评论(0) 推荐(0)

const和volatile分析
摘要:1. const只读变量——(注意不是真正常量,只是告诉编译器不能出现在赋值号左边!) (1)const修饰的变量是只读的,本质还是变量 (2)const修饰的局部变量在栈上分配空间 (3)const修饰的全局变量在全局数据区分配空间(vc、gcc会将其放入常量区,bcc放入全局数据区) (4)co 阅读全文

posted @ 2018-04-12 17:17 arabain 阅读(114) 评论(0) 推荐(0)

goto、void和sizeof分析
摘要:1. 遭人遗弃的goto (1)高手潜规则:禁用goto (2)项目经验:程序质量与goto出现的次数成反比 (3)最后的判决:将goto打入冷宫(1)循环语句的基本工作方式 【实例分析】goto副作用的分析 2. void的意义 (1)void修饰函数返回值和参数——为了表示“无” ①如果函数没有 阅读全文

posted @ 2018-04-12 16:02 arabain 阅读(129) 评论(0) 推荐(0)

if、switch、do、while和for分析
摘要:1. if语句 (1)if语句用于根据条件选择执行语句 (2)else不能独立存在且总是与它之前最近的if相匹配 (3)else语句后可以接连其他if语句 (4)if语句中零值比较的注意点 ①bool型变量直接出现于条件中,不要进行比较 ②变量和0值比较时,0值应该出现在比较符号左边(工程经验) ③ 阅读全文

posted @ 2018-04-12 14:16 arabain 阅读(384) 评论(0) 推荐(0)

auto、register、static和extern分析
摘要:1.C语言的变量属性 (1)C语言中的变量可以有自己的属性 (2)在定义变量的时候可以加上“属性”关键字 (3)“属性”关键字指明变量的特有意义。语法:property type var_name; 2. auto关键字 (1)auto即C语言中局部变量的默认属性 (2)auto表明将被修饰的变量存 阅读全文

posted @ 2018-04-12 11:02 arabain 阅读(225) 评论(0) 推荐(0)

基本数据类型
摘要:1.数据类型 1.1 什么是数据类型 (1)数据类型可以理解为固定内存大小的别名 (2)数据类型是创建变量的模子 1.2 数据类型的本质 2. 变量的本质 (1)变量是一段实际连续存储空间的别名 (2)程序中通过变量来申请并命名存储空间 (3)通过变量的名字可以使用存储空间 3.实例分析 (1)类型 阅读全文

posted @ 2018-04-12 10:12 arabain 阅读(64) 评论(0) 推荐(0)

1

导航