您的位置:首页 > 编程语言 > C语言/C++

c语言深度剖析笔记4

2016-10-21 11:16 239 查看
2016.8.26 DAGE

复习内容: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 是将已存在文件的内容嵌入到当前文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: