当前位置: 首页 > news >正文

哪个网站有手机珠海哪个公司建设网站好

哪个网站有手机,珠海哪个公司建设网站好,泸州公司做网站,品牌视觉识别系统案例预处理器 编译第一步称为预处理(preprocessing)阶段。C预处理器(preprocessor)在源代码编译之前对其进行一些文本性质的操作,包括删除注释、插入被#include 指令包含的文件的内容,替换由#define指令定义的符号以及根据条件编译指令进行编译。 预定义符…

预处理器

编译第一步称为预处理(preprocessing)阶段。C预处理器(preprocessor)在源代码编译之前对其进行一些文本性质的操作,包括删除注释、插入被#include 指令包含的文件的内容,替换由#define指令定义的符号以及根据条件编译指令进行编译。

预定义符号

#define
#define name stuff

预处理器把所有name替换成 stuff。

在程序中扩展#define定义符号和宏时,需要涉及几个步骤:

1.在调用宏时,首先对参数进行检查,看看是否包含了任何由#define 定义的符号。如果是,

它们首先被替换。

2.替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被它们的值所替代。

3.最后,再次对结果文本进行扫描,看看它是否包含了任何由#define 定义的符号。如果是,就重复上述处理过程。这样,宏参数和#define 定义可以包含其他#define定义的符号。但是,宏不可以出现递归。

更多例子

#define reg register
#define do_forever for(;;) 
#define CASE break;case

如果定义中的stuff非常长,它可以分成几行,除了最后一行之外,每行的末尾都要加一个反斜杠。

#define DEBUG_PRINT printf(“File 8s line 8d:”\ "x=8d, y=8d,z=8d",_FILE__,__LINE__,\X, y, z)

但是尽量使用内联函数,不要使用宏定义函数

#define允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(defined macro)。

宏的声明方式:

#define name(parameter-list) stuff

避免使用宏定义函数

#define SQUARE(x)  x* x
问题:
a = 5;
SQUARE(a+1)=>  a+1*a+1 
修正:
#define SQUARE(x) (x)*(x)#define DOUBLE(x) (x)+(x)
问题:
a=5;
10*DOUBLE(a);=>10*(5)+(5)
修正:
#define DOUBLE(x) ((x)+(x))
宏与函数

宏非常频繁地用于执行简单的计算,比如在两个表达式中寻找其中较大(或较小)的一个:

#define MAX( a, b )   ((a)>(b)?(a):(b))

函数的参数必须声明为一种特定的类型,所以它只能在类型合适的表达式上使用。反之,这个宏可以用于整型、长整型、单浮点型、双浮点数以及其他任何可以用>操作符比较值大小的类型。宏是与类型无关的。

根本无法用函数实现的任务:

#define MALLOC(n, type)
((type *)malloc((n)*sizeof( type)))pi = MALLOC( 25, int );
pi =(( int * )malloc((25)* sizeof( int )));

类型无法作为参数传到函数中。(在类型萃取中也会用到(bool_type))

带副作用的宏参数

当宏参数在宏定义中出现的次数超过一次时,如果这个参数具有副作用,那么当你使用这个宏

时就可能出现危险,导致不可预料的结果。

#define MAX( a,b) ((a)>(b)?(a):(b)) 
x=5; y=8;
Z=MAX( x++, Y++ );=> Z=((x++)>(y++ )?(x++):( y++ ));
printf(“x=8d, y=8d, z=8d\n”,x,Y.z);

#undef

用于移除一个宏定义,如果一个现存的名字需要被重新定义,那么旧定义首先必须用#undef移除。

#undef name
命令行定义

可以在命令行中进行宏定义

int array[ARRAY_SIZE]; 
gcc...  -D ARRAY_SIZE=100 prog.c//大概是这样
条件编译

使用条件编译,可以选择代码的一部分是被正常编译还是完全忽略

(如只用于调试程序的语句)。

用于支持条件编译的基本结构是#if指令和与其匹配的#endif指令。

#if constant-expressionstatements
#endif
//example:
#define DEBUG 1
#if DEBUGprintf("x=8d, y=8d\n",x,y );
#endif//is-else
#if constant-expression
statements
#elif constant-expression
other statements
#else
other statements
#endif//测试符号是否被定义
#ifdef symbol
#ifndef symbol//指令嵌套
#if #ifdef OPTION1unix_version_of_option1();
#endif #ifdef OPTION2unix_version_of_option2();
#endifdefined(OS_MSDOS)#elif #ifdef OPTION2msdos_version_of_option2();
#endif
#endif
文件包含 (#include)

#include指令使另一个文件的内容被编译,预处理器删除#include,并用包含文件的内容取而代之。

使用#include 文件涉及一些开销但不大。

(1)如果两个源文件都需要同一组声明,把这些声明复制到每个源文件中所花费的编译时间跟把这些声明放入一个头文件,然后再用#include 指令把它包含于每个源文件所花费的编译时间相差无几。

(2)开销只是在程序被编译时才存在,对运行时效率无影响。

把这些声明放于一个头文件中,如果其他源文件还需要这些声明,就不必把这些拷贝逐一复制到这些源文件中,维护简单。

模块化的设计:

把使用几个头文件,每个头文件包含用于某个特定函数或模块的声明的做法更好一些。

函数库文件包含
#include <filename>

由编译器定义的"一系列标准位置"查找函数库头文件,如UNIX系统上的C编译器在/user/include目录查找函数库头文件。编译器允许把其他目录添加到这个列表,这样就可以创建自已的头文件函数库。

本地文件包含

处理本地头文件的一种常见策略就是在源文件所在的当前目录进行查找,如果该头文件并未找到,编译器就像查找函数库头文件一样在标准位置查找本地头文件。

#include "filename"
嵌套文件包含

头文件中包含头文件

// functions.h
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include <stdio.h>  // 包含以获取EOF等定义
int read_valid_int(void);  // 函数声明
#endif /* FUNCTIONS_H */

嵌套文件包含可能会将头文件包含多次,出现重复编译的问题。可以使用条件编译。所有的头文件都像下面这样编写:

#ifndef _HEADERNAME_H
#define _HEADERNAME_H 1
/*
** All the stuff that you want in the header file
*/
#endif

那么,多重包含的危险就被消除了。当头文件第 1 次被包含时,它被正常处理,符号_HEADERNAME_H 被定义为1。如果头文件被再次包含,通过条件编译,它的所有内容被忽略。

其他指令

#error 指令允许你生成错误信息

#error 指令允许你生成错误信息
#error text of error message
#line number "string

#line number通知预处理器 number是下一行输入的行号。

如果给出了可选部分“string”,预处理器就把它作为当前文件的名字。值得注意的是,这条指令将修改__LINE__符号的值,如果加上可选部分,它还将修改__FILE_符号的值,这条指令常用于把其他语言的代码转换为C代码的程序。

#pragma 向编译器发送特定的命令或请求,这些命令通常是编译器特定的,用来控制编译过程中的某些方面

#pragma once:这是非标准但广泛使用的指令,用于防止头文件被多次包含。

#pragma warning(disable: warning-number):关闭特定警告编号的编译器警告。

#pragma optimize("level"):指定优化级别。

#pragma message("message"):生成一个编译器信息消息。

#pragma source_encoding("encoding"):指定源文件的字符编码。

包规范:在某些编译器中,可以用来指定或控制某些编译特性。

调试辅助:#pragma pack(push, n) 和 #pragma pack(pop):用于控制结构体成员的对齐方式。

http://www.yayakq.cn/news/548213/

相关文章:

  • 小说网站开发背景pc网站开发制作
  • 国家基础设施建设网站精品课程网站建设验收单
  • 创建一个个人网站需要多少钱北京大兴行业网站建设公司
  • wordpress主题下载seo l
  • 常熟港口建设费申报网站网络科技公司怎么挣钱
  • 做盗版网站会怎样房产信息网哪个好
  • 设计素材网站哪个最好用荆门城乡建设局网站
  • 网站免费建站系统 六南县做网站
  • 建设部网站官网合同怎么做娱乐网站
  • 广州建设厅网站首页辽宁工程造价信息网官网
  • 北京信息网站建设怎么让网站收录在google
  • python3 网站开发济南建站培训
  • 网站文章收录查询网站开发设计怎么找客户
  • 想做外贸做哪些网站好软文推广文案范文
  • 更改各网站企业信息怎么做淘宝网站边上的导航栏怎么做
  • 网站建设 数据分析网站类型分类
  • flash翻页效果网站模板十大平面设计公司
  • 深圳网站开发antnwseo电商运营是什么意思
  • html5video网站茂名公司网站设计
  • 怎么能自己创建网站做网站网站建设专业公司哪家好
  • 四川泸州做网站的公司有哪些wordpress首页热门排行显示
  • 北京高端网站设计公司做网站要找本地的吗
  • 网站建设vs网络推广上海微网站制作
  • 在线制作网站的工具网站制作方案有哪些
  • 网线制作ppt宁波seo关键词优化设计
  • 哪里有学做视频的网站3免费网上商城网站建设
  • 生产建设网站基坑开挖深度福州品牌网站建设
  • 商务网站建设行业资讯平台网站建设
  • 什么是网站外链网站建设主要包括什么
  • 云阳做网站88hmtopa6c7qq进入