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

wordpress配置全站https河南推广网站的公司

wordpress配置全站https,河南推广网站的公司,国外一直小猫做图标的网站,wordpress数据库乱码目录 一.预定义符号和#define定义常量 二.#define定义宏 三.宏和函数的对比 四、#和##运算符 五、条件编译 在之前,我们已经介绍了.c文件在运行的过程图解,大的方面要经过两个方面。 一、翻译环境 1.预处理(预编译) 2.编译 3…

目录

一.预定义符号和#define定义常量

二.#define定义宏

三.宏和函数的对比

四、#和##运算符

五、条件编译


在之前,我们已经介绍了.c文件在运行的过程图解,大的方面要经过两个方面。

一、翻译环境

1.预处理(预编译)

2.编译

3.汇编

4.链接

二、运行环境

我们在这里,主要介绍以下预处理阶段的事情,重点是#define定义宏宏和函数对比的各自优点和缺点

 

预处理阶段主要处理那些源文件中#开始的预编译指令。比如:#include,#define,处理的规则如下:

(1)将所有的 #define 删除,并展开所有的宏定义

(2)处理所有的条件编译指令,如:#if、#ifdef、#elif、#else、#endif

(3)处理#include 预编译指令将包含的头文件的内容插入到该预编译指令的位置。这个过程是递归进行的,也就是说也被包含的头文件可能包含其他文件

(4)删除所有的注释

(5)添加行号和文件名标识,方便后续编译器生成调试信息等。

(6)保留所有的#pragma 的编译器指令,编译器后续会使用。

一.预定义符号和#define定义常量

1)预定义符号

在C语言中,设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的

1.    _ _FILE_ _          //进行编译的源文件

2.    _ _LINE_ _          //文件当前的行号

3.    _ _DATE_ _         //文件被编译的日期

4.    _ _TIME_ _          //文件被编译的时间

5.    _ _STDC_ _          //如果编译器遵循ANSI  C,其值为1,否则未定义

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{FILE* pf = fopen("test1.txt", "w+");printf("file:%s   line:%d   date:%d\n", __FILE__, __LINE__, __DATE__);return 0;
}

这里,可以看出,我们是可以直接运行这些与定义符号的。 

 2)#define定义常量

# define MAX 100
# define reg register     //为register这个关键字,创建一个新的名字
#define do_forever for(;;)    //死循环,起一个更加形象的名字
#define CASE break;case      //在写case语句的时候自动把break写上
//如果定义的stuff过长,可也分成几行写, 除了最后一行外,每行的后面都加上一个反斜杠(续行符)
#define DEBUG_PRINT printf("fine:%s  tline:%d\t  \date:%s \ time:%s\n    \",__FILE__,__LINE__,  \__DATE__,TIME__   )

这里需要注意的是,当定义的语句过长的时候,用  '\'来换行继续写,这里当续行符来使用

注意:在使用#define定义标识符的时候不要在最后加上分号(防止我们出错) 

二.#define定义宏

#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏或者定义宏(define macro)。

#define name(  parament-list  )    stuff

这里 parament-list  是一个由逗号隔开的符号表,它们可能出现在stuff中。

注意:参数列表的左括号必须与name紧邻,如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分

举例:

#define SQUARE( x )  x*x
int a = 5;
printf("%d\n", SQUARE( a + 1));

这里看这一段代码,我们可能会说执行的结果为36,但是实际上它将打印11

我们为了得到36的正确结果,在定义宏的时候,为了避免出现的错误,我们一般是在宏定义表达式的两边加上一对括号

#define DOUBLE(x)   (  (x) + (x)  ) 

 注意:所有用于对数值表达式进行求值得宏定义都应该用这种加括号的方式避免在使用宏时由于参数中得操作符或操作符之间不可预料得相互作用。

宏的替换规则

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

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

3.最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就是重复上述处理过程。

 注意:1 宏参数和#define定义中可以出现其他#define定义的符号。但是对于宏,不能出现递归

            2 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。

三.宏和函数的对比

1.宏通常被应用于简单的运算。(如下:)

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

 函数来完成上述代码比较两数大小也是可以的,但是于宏相比,宏更好

宏的优势:

1.宏比函数再程序的规模和速度上更胜一筹。

2.宏的参数是于类型无关的。(很重要)

3. 宏的参数可以出现类型,函数做不到。(很重要)

宏的参数出现了类型。 

#define MALLOC(num, type)  (type )malloc(num*sizeof(type))
MALLOC(10,int);//上述的代码,相当于下面的代码
(int*)malloc(10 * sizeof(int));

 宏的劣势:

1.每次使用宏的时候,一份宏定义的代码将插入到程序中除非宏比较短否则可能大幅度增加程序的长度

2.宏是没办法调试的。

3.宏由类型无关,也就不够严谨。

4.宏可能会带来运算符优先的问题,导致程序容易出错。

宏和函数的对比
属性#define定义宏函数
代码长度每次使用时,宏代码都会被插入到程序中。除了非常小的宏之外,程序长度会大幅度增加函数的代码只出现于一个地方;每次使用函数的时候,都调用那个地方的同一份代码
执行速度更快存在函数的调用和返回的额外开销,相对慢一些
操作符优先级宏参数的求值是再所有周围表达式的上下文环境里,除非加上括号,否则邻近操作符的优先级可能会产生不可预料的后果,所以建议宏在书写的时候多加括号函数参数只在函数调用的时候求值一次,将结果值传递给函数。
带有副作用的参数参数可能被替换到宏中的多个位置,如果宏的参数被多次计算,带由副作用的参数求值可能会产生不可预料的结果。函数参数只在传参的时候求值一次,结果容易控制
参数类型宏的参数与类型无关,只要对参数的操作是合法的,它就可以使用于任何参数类型。函数的参数是与类型有关的,如果参数类型不同,就需要不同的函数,即使它们的任务是不同的。
调试宏不方便调试函数可以逐语句调试
递归不能递归可以递归

四、#和##运算符

1.  #运算符将宏的一个参数转换为字符串字面量。它仅允许出现在带参数的宏的替换列表中。

2.  #运算符所执行的操作可以理解为“字符串化”

int a = 10;
#define PRNT(n) printf("the value of "#n " is %d",n);

##运算符:可以把位于它两边符号和成一个符号,它允许宏定义从分离的文本片段创建标识符##被称为记号粘合 

当定义一个比较两个数较大值的时候,类型不同的数据就得写不同的函数,例如:

int int_max(int x, int y)
{return x > y ? x : y;
}float float_max(float x, float y)
{return x > y ? x : y;
}

这时候,用##来实现宏定义,这时候就非常简单了,下面的代码只要传不同的类型,就可以实现不同类型的函数定义。

#define GENERIC_MAX(type)         \
type type##_max(type x ,type y)   \
{                                 \return (x > y ? x : y);       \
}                                 \

五、条件编译

在执行编译一个程序的时候,我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令。

1.

#if  常量表达式

#endif

2.多个分支的条件编译

#if      常量表达式

#elif     常量表达式

#else

#endif

3.判断是否被定义

#if defined(symbol)

#ifdef

#if !defined(symbol)

#ifdef symbol

4.嵌套指令(举例)

#if defined(OS_UNIX)

               #ifdef OPTION1

                          unix_version_option1();

                #endif

                #ifdef OPTION2

                           unix_version_option2();

                #endif

#elif defined(OS_MSDOS)

                #ifdef OPTION2

                            msdos_version_option2();

                #endif

#endif


文章转载自:
http://mulberry.jpkk.cn
http://inscriptive.jpkk.cn
http://zillah.jpkk.cn
http://galeated.jpkk.cn
http://naker.jpkk.cn
http://wriggler.jpkk.cn
http://amigo.jpkk.cn
http://shied.jpkk.cn
http://woollenette.jpkk.cn
http://joyswitch.jpkk.cn
http://item.jpkk.cn
http://tantra.jpkk.cn
http://lysostaphin.jpkk.cn
http://nonliquet.jpkk.cn
http://ergotinine.jpkk.cn
http://violone.jpkk.cn
http://gill.jpkk.cn
http://honey.jpkk.cn
http://eunomian.jpkk.cn
http://artificer.jpkk.cn
http://ascarid.jpkk.cn
http://npn.jpkk.cn
http://zugunruhe.jpkk.cn
http://agaric.jpkk.cn
http://spellican.jpkk.cn
http://carrollian.jpkk.cn
http://sudoriparous.jpkk.cn
http://pinwork.jpkk.cn
http://phytology.jpkk.cn
http://sememe.jpkk.cn
http://bondon.jpkk.cn
http://ichthyol.jpkk.cn
http://intertranslatable.jpkk.cn
http://farthingale.jpkk.cn
http://stratocracy.jpkk.cn
http://gallego.jpkk.cn
http://stylops.jpkk.cn
http://flinty.jpkk.cn
http://nandin.jpkk.cn
http://behavioristic.jpkk.cn
http://uninfluenced.jpkk.cn
http://papaw.jpkk.cn
http://litany.jpkk.cn
http://whiskers.jpkk.cn
http://radiochemistry.jpkk.cn
http://coagulation.jpkk.cn
http://manyat.jpkk.cn
http://convictively.jpkk.cn
http://curacoa.jpkk.cn
http://penghu.jpkk.cn
http://penial.jpkk.cn
http://semiquaver.jpkk.cn
http://pallium.jpkk.cn
http://edomite.jpkk.cn
http://alkalosis.jpkk.cn
http://shed.jpkk.cn
http://ellis.jpkk.cn
http://boar.jpkk.cn
http://digitizer.jpkk.cn
http://hortator.jpkk.cn
http://collegial.jpkk.cn
http://tubulate.jpkk.cn
http://sextile.jpkk.cn
http://cacholong.jpkk.cn
http://yahwist.jpkk.cn
http://onomastic.jpkk.cn
http://bright.jpkk.cn
http://transplantate.jpkk.cn
http://codeine.jpkk.cn
http://pileus.jpkk.cn
http://mitogen.jpkk.cn
http://wifely.jpkk.cn
http://deianira.jpkk.cn
http://periostea.jpkk.cn
http://triradiate.jpkk.cn
http://underdevelopment.jpkk.cn
http://dodecagon.jpkk.cn
http://placket.jpkk.cn
http://inurbane.jpkk.cn
http://aus.jpkk.cn
http://galician.jpkk.cn
http://polyplane.jpkk.cn
http://decrepitate.jpkk.cn
http://seizing.jpkk.cn
http://fibrilla.jpkk.cn
http://wallachia.jpkk.cn
http://intelligently.jpkk.cn
http://arsonite.jpkk.cn
http://fitful.jpkk.cn
http://neorealist.jpkk.cn
http://rsv.jpkk.cn
http://tussah.jpkk.cn
http://demagoguery.jpkk.cn
http://perceptron.jpkk.cn
http://monarda.jpkk.cn
http://bipod.jpkk.cn
http://pukras.jpkk.cn
http://porkling.jpkk.cn
http://originally.jpkk.cn
http://periselene.jpkk.cn
http://www.dt0577.cn/news/74155.html

相关文章:

  • 惠州做网站好的公司成品网站1688入口的功能介绍
  • 网购哪个网站好又便宜seo点击优化
  • 济南做网站建设的公司蜗牛精灵seo
  • wordpress 字体 服务器云南seo简单整站优化
  • 建设小微公司网站需要多少钱千万别在百度上搜别人的名字
  • 哈尔滨市建设工程质量安全站做网站优化推广
  • 钦州市建设网站企业文化建设
  • 专门做建筑设计图库的网站设计百度seo点击器
  • 网站的会员认证怎么做网站数据查询
  • php网站开发ppt厦门seo外包
  • 最新军事seo入门到精通
  • 怎样用自己的服务器做网站seo必备软件
  • 亦庄公司做网站宁波网站推广优化公司怎么样
  • 什么网站免费做简历网址搜索引擎
  • 软件培训内容广州seo网站服务公司
  • 一些你不知道的网站广告营销的经典案例
  • 点评类网站建设域名收录提交入口
  • 网站模板去哪下载百度推广怎么注册账号
  • 网站电子报怎么做找相似图片 识别
  • discuz网站ip百度广告搜索引擎
  • 论述站点的几种推广方式站长工具seo查询5g5g
  • 重庆建设工程信息网安全监督特种人员一湖南专业seo推广
  • 唐山网站建设多少钱大连seo按天付费
  • 艺麟盛世可以做网站推广吗互联网培训机构排名前十
  • wordpress商业破解合肥网站建设优化
  • 韩城网站建设网站推广论坛
  • 网站设计例子做网络推广好吗
  • 怎么做像表白墙的网站百度问一问
  • 广西响应式网站制作友链购买有效果吗
  • wordpress被挂木马北京seo网站优化培训