c语言深度剖析笔记4
2016-10-21 11:16
239 查看
2016.8.26 DAGE
复习内容:c深度剖析笔记4
复习内容:c深度剖析笔记4
a.优先级方面需要注意的几个小的点
1. "."的优先级高于* []高于* == 和!=高于位操作 位操作即&和|和^,~ == 和!=高于赋值符 算术运算符高于位移运算符 逗号运算符在所有运算符中优先级最低
b.预处理
1.基本意义
#define 宏定义 #undef 撤销已定义过的宏名 后面跟着定义好的宏名,表示把它撤销掉 #include使编译程序将另一源文件嵌入到带有#include 的源文件中 #if(#else,#elif,#endif) #if 的一般含义是如果#if 后面的常量表达式为 true, 则编译它与#endif 之间的代码,否则跳过这些代码。 #endif 标识一个#if 块的结束。#else命令的功能有点象 C 语言中的 else #else 建立另一选择(在# if 失败的情况下) #elif 命令意义与 else if 相同,它形成一个 if else-if 阶梯状语句,可进行多种编译选择。 #ifdef,#ifndef 用#ifdef 与#ifndef 命令分别表示“如果有定义”及“如果无定义”,是条件编译的另一种方法。 #ifndef x //先测试x是否被宏定义过 #define x 程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1 #else 程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1。 #endif//终止if #line 改变当前行数和文件名称,它们是在编译程序中预先定义的标识符 命令的基本形式如下: #line number["filename"] #error 编译程序时,只要遇到 #error 就会生成一个编译错误提示消息,并停止编译 #pragma 为实现时定义的命令,允许向编译程序传送各种指令例如,编译程序可能有一种选择,它支持对程序执行的跟踪。 可用#pragma 语句指定一个跟踪选择。 第二次查资料详解: 作用:设定编译器的状态或是指示编译器完成一些特定的动作。 格式:一般是#pragma Para的格式 常用的参数: message:Message 参数能够在编译信息输出窗口中输出相应的信息 #pragma message("消息文本") 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 比如可以在某个地方对于某个宏是否定义可以使用#ifdef 宏名字 来判断,把定义了的输出出来显示 code_seg:格式如: #pragma code_seg(["section-name"[,"section-class"]]) 它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。 once:只要在头文件的最开始加入这条指令就能够保证头文件被编译一次 hdrstop:表示预编译头文件到此为止,后面的头文件不进行预编译。 resource: #pragma resource "*.dfm"表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。 warning: #pragma warning(disable:450734;once:4385;error:164) 等价于: #pragma warning(disable:450734)//不显示4507和34号警告信息 #pragma warning(once:4385)//4385号警告信息仅报告一次 #pragma warning(error:164)//把164号警告信息作为一个错误。 还有一些,等到用到时再写吧,这个预处理比较复杂。 _LINE_ 表示正在编译的文件的行号 _FILE_ 表示正在编译的文件的名字 _DATE_ 表示编译时刻的日期字符串,例如: "25 Dec 2007" _TIME_ 表示编译时刻的时间字符串,例如: "12:30:55" _STDC_ 判断该文件是不是定义成标准 C 程序
2.宏定义
常用范围: 定义宏常数,比如一个在程序中会多次出现的数字以及类似-1这种出错的返回值可以使用宏常数替换来让程序可读性更强 定义宏字符串,比如定义一个宏常量来表示当前的路径 宏函数被调用时是以实参代换形参。而不是“值传送” 宏的生命周期从#define 开始到#undef 结束。 如果一个宏生命周期外调用这个宏,会报错提示这个调用到的未声明
3.条件编译
条件编译的功能使得我们可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式 第一种形式: #ifdef 标识符 程序段 1 #else 程序段 2 #endif 第二种形式: #ifndef 标识符 程序段 1 #else 程序段 2 #endif 第三种形式: #if 常量表达式 程序段 1 #else 程序段 2 #endif
3.文件包含
include 它可用来把多个源文件连接成一个源文件进行编译,结果将生成一个目标文件。 C语言提供#include 命令来实现文件包含的操作,它实际是宏替换的延伸 两种格式: 格式 1: #include <filename> ilename 为要包含的文件名称,用尖括号括起来,也称为头文件,表示预处理到系统规定的路径中去获得这个文件(即 C 编译系统所提供的并存放在指定的子目录下的头文件)。找到文件后,用文件内容替换该语句。 格式 2: #include “filename” 其中,filename 为要包含的文件名称。双引号表示预处理应在当前目录中查找文件名为filename 的文件,若没有找到,则按系统指定的路径信息,搜索其他目录。找到文件后,用文件内容替换该语句。 #include 是将已存在文件的内容嵌入到当前文件中。
相关文章推荐
- C语言深度剖析笔记(1)
- 《C语言深度剖析》学习笔记----C语言中的符号
- C语言深度剖析——个人笔记
- C语言深度剖析学习笔记-指针、数组、内存、函数
- 一无所有:阅读陈正冲《C语言深度剖析 第二版》笔记 1(声明)
- C语言深度剖析学习笔记-符号
- c语言深度剖析笔记5
- C语言深度剖析--读书笔记1_定义和声明
- C语言深度剖析笔记(2)
- C语言深度剖析笔记(七)
- C语言深度剖析笔记(指针和数组)
- 20110907C语言深度剖析笔记
- C语言深度剖析笔记(六)
- c语言深度剖析之学习笔记(二)------------符号
- <<C语言深度剖析>>学习笔记之一:C语言中32个关键字
- C语言深度剖析学习笔记
- [学习笔记]C语言深度剖析
- C语言深度剖析学习笔记-预处理
- 读c语言深度剖析 -- 单引号与双引号、逻辑运算符、位运算符、花括号
- 读c语言深度剖析 -- 闲谈const(3)