宏定义语句结束

1.C语言宏定义为何不用分号结束

分号是C语言一条语句结束的标识,宏定义可以是一条完整的语句,也可以是一条语句的一部分,还可以是多条语句组成。

所以不一定要用分号结束,而是要根据实际情况具体判断是否要用分号。 在定义宏时,如果一行写入的数据太长,会影响阅读,这时可以在需要换行的地方加入反斜杠(\),然后在\后换行。

比如 #define output(x) printf("the var's \ value is %d",\ x) 和写作 #define output(x) printf("the var's value is %d", x) 是没有区别的。

2.宏定义多条语句

宏定义多条语句可以用如下的形式进行定义:

#define swap(a,b) { a = a + b; b = a - b; a = a - b; }

// 如果分行写,可以写成如下形式

#define swap(a,b) { a = a + b;\

b = a - b;\

a = a - b;}

宏定义一般分为带参宏定义和不带参宏定义。

带参宏定义,也即带参数的宏定义,如:

#define MAX(a,b) ((a)>(b) ? (a) : (b)) // 求最大值不带参宏定义,也即不带参数的宏定义,如:

#define PI 3.14159 // 定义圆周率pi的值

3.一个C语言的宏定义语句

#define WRITE(DATATYPE,DATA) do{*(DATATYPE*)(save_offset)=DATA;save_offset +=sizeof(DATATYPE);}while(0)

我建议宏这样写比较好,可以避免很多麻烦。

save_offset 是unsigned int型。意思是存放指针地址数据的地方,不是指针类型,是你所说的普通变量,0-65535之间(我取的是2个字节所以是2的16次方 - 1,但不一定是这个数,根据编译器不同而不同)。

DATATYPE 是变量类型 譬如 int ,char型。

(DATATYPE*)(save_offset) 强制转换为DATATYPE类型指针;*(DATATYPE*)(save_offset)意思是在0x0000地址写入DATA。

save_offset +=sizeof(DATATYPE) 这句话意思是 save_offset取下一个地址。

这个宏定义的主要功能是 在0x0000开头的内存中写入DATATYPE数据。

例如:

WRITE(char,128);

宏展开之后是:

do{*(char*)(save_offset)=128;save_offset +=sizeof(char);}while(0)

执行过后

在内存地址为0x0000处写入数据128占据sizeof(char)个字节,并在0x0000 + sizeof(char)处等待下一个数据的写入。

大概就是这个意思。

4.#define语句最后为什么不加分号

#define最后加不加分号跟define本身没有关系,而取决于你使用的地方。

如:

#define my_value 5;

如果这样用:

int x = my_value; //没有问题,相当于int x=5;; 注意是两个分号罗

但这样用:if(x == my_value ) //这样用有问题,因为其相当于:if(x==5;)

明白了么?实际 #define 只是起替换的作用。

还有个比较经典的例子是。

#define test(x) (x)*(x)

那么 int x=5;

int y= test(++x); //y的值是多少? 36? 错了,是 (++x)*(++x)=6*7=42

5.C语言程序中的语句都用什么作为结束符

C语言规定,语句的结束符用分号(;)来进行标识。

C语言中语句分为简单语句(simple statement)和复合语句(compound statement)。

简单语句以分号作为结束。其中简单语句里面又有赋值语句、声明语句、结构化语句、函数调用语句和 空语句。复合语句指用花括号{ } 将简单语句甚至另一些复合包起来,所以就以}作为语句结束的标记。

举例说明如下:

printf("HelloWorld") // 不加分号,在编译的时候会报错

printf("HelloWorld"); // 编译的时候不会报错,输出HelloWorld

需要注意的是宏定义不用加分号,如:

#define PI 3.14 // 不用加分号,加了分号会报错

宏定义语句结束

转载请注明出处唯美语句网 » 宏定义语句结束

资讯

linux中for语句

阅读(5)

本文主要为您介绍linux中for语句,内容包括linux中使用for语句创建命令行上所有整数只和的shell,linux的for循环的写法,linux中Shell编程:用for语句实现1+2+3+100。[root@localhost ~]# cat e1#!/bin/basha=$*sum=0for i in $adosum=`expr

资讯

nosql语句

阅读(5)

本文主要为您介绍nosql语句,内容包括简述什么是nosql数据库,并列举两种常见的nosql数据库名称及其特点,nosql数据库,什么是nosql数据库。NoSQL太火,冒出太多产品了,保守估计也成百上千了。互联网公司常用的基本集中在以下几种,每种只举一个比

资讯

现代汉语句子分析

阅读(6)

本文主要为您介绍现代汉语句子分析,内容包括现代汉语中的句子分析法都,现代汉语题,分析句子,现代汉语用成分分析法分析句子。主要有(一)句子成分分析法(二)层次分析法 (三)其他句子分析方法句子成分分析法又称“中心词分析法”,是传统语法学使用的

资讯

lol嘲讽语句

阅读(5)

本文主要为您介绍lol嘲讽语句,内容包括英雄联盟:游戏中嘲讽对手的话,lol怎么发嘲讽语句,lol怎么语言嘲讽对手。1.当盖伦与诺克萨斯之手遇见时,盖伦:德莱厄斯,你不是将军,你只是个屠夫! 2.剑魔遇到蛮子会说:泰达米尔,我最成功的作品。 3.德莱文

资讯

sql查看视图语句

阅读(5)

本文主要为您介绍sql查看视图语句,内容包括如何查看数据库中视图的sql语句,查询视图语句怎么写,sqlserver怎么查视图语句。视图可以被看成是虚拟表或存储查询。可通过视图访问的数据不作为独特的对象存储在数据库内。数据库内存储的是 SELE

资讯

汇编的条件语句

阅读(5)

本文主要为您介绍汇编的条件语句,内容包括用汇编语言解释if语句,汇编语言中的条件指令,汇编实现条件语句:两数不等则执行相等则跳过。无符号数条件转移指令je/jz zf=1 若相等或为零则转移jne/jnz zf=0 若不相等或不为零则转移 ja/jnbe cf=0

资讯

statafor循环语句

阅读(5)

本文主要为您介绍statafor循环语句,内容包括stata中循环语句的命令,stata中循环语句的命令,stata如何最总样本的子集进行循环语句。forvalues 语句数字的循环while 语句条件循环foreach 语句变量、暂元、文件等的循环 这道题应该用foreach,

资讯

出车祸的语句

阅读(8)

本文主要为您介绍出车祸的语句,内容包括求形容出车祸的句子,描写车祸的优美句子,描写撞车的语句。1. 一瞬间,她被撞飞了出去,只看她的秀发已经沾满血迹,嘴角隐隐还有鲜血流出,原本可爱的脸,现在已经变得无比苍白,上半身还隐隐在抽搐,只

资讯

优美的环境语句

阅读(6)

本文主要为您介绍优美的环境语句,内容包括形容环境优美句子,关于环境的优美句子大全,优美的环境句子。描写环境的优美句子碧蓝如洗的晴空下,是一片连绵不断的青山绿树,各种不知名的野花在丛林间争相盛开,绽放着如云霞般绚烂的色彩。2、让我们

资讯

描述草的语句

阅读(6)

本文主要为您介绍描述草的语句,内容包括描写草的句子,描写草的句子大全,描写草的外貌的句子。描写草的好句子岸边的小草不知什么时候偷偷地从土里钻出来,在春风的吹拂下轻盈地舞动。2、含羞草那密生的小叶片,怯生生的,腼腆得很,它不禁羞

资讯

情商高语句

阅读(6)

本文主要为您介绍情商高语句,内容包括很有格调的高情商句子,关于情商的句子,有关情商的句子。如果梦想有捷径的话,那么这条路的名字一定叫坚持。二、人生没有白读的书,你触碰过的那些文字,会慢慢帮你认识这个世界,悄悄帮你抹去脸上的肤浅

资讯

骂男人的经典语句

阅读(6)

本文主要为您介绍骂男人的经典语句,内容包括讽刺男人经典语句,讽刺男人的经典语句,骂男孩的经典语句。站的更高,尿的更远。2、真不好意思,让您贱笑了。3、真想把你送去笼子里面游街,尝尝大白菜和臭鸡蛋的美滋美味。4、执子之手,将子拖走。子说

资讯

初一上册英语句子

阅读(6)

本文主要为您介绍初一上册英语句子,内容包括初一上册英语重点句子,初一上学期英语句子总汇,初一上学期英语的重点句子(50条)要带汉语的啊。我忘了初一的有什么了,这是我初一那时找的了,数量没法到你的要求。 1. Whats your name? My names Gin

资讯

四大名著经典语句

阅读(5)

本文主要为您介绍四大名著经典语句,内容包括四大名著经典语句,四大名著中的经典语句,中国古典四大名著的精彩句子。四大名著歇后语 周瑜打黄盖 一个愿打,一个原挨 一个愿挨诸葛亮吊孝------装模作样 诸葛亮征孟获------收收放放 诸葛亮弹琴

资讯

linux中for语句

阅读(5)

本文主要为您介绍linux中for语句,内容包括linux中使用for语句创建命令行上所有整数只和的shell,linux的for循环的写法,linux中Shell编程:用for语句实现1+2+3+100。[root@localhost ~]# cat e1#!/bin/basha=$*sum=0for i in $adosum=`expr

资讯

nosql语句

阅读(5)

本文主要为您介绍nosql语句,内容包括简述什么是nosql数据库,并列举两种常见的nosql数据库名称及其特点,nosql数据库,什么是nosql数据库。NoSQL太火,冒出太多产品了,保守估计也成百上千了。互联网公司常用的基本集中在以下几种,每种只举一个比

资讯

现代汉语句子分析

阅读(6)

本文主要为您介绍现代汉语句子分析,内容包括现代汉语中的句子分析法都,现代汉语题,分析句子,现代汉语用成分分析法分析句子。主要有(一)句子成分分析法(二)层次分析法 (三)其他句子分析方法句子成分分析法又称“中心词分析法”,是传统语法学使用的

资讯

lol嘲讽语句

阅读(5)

本文主要为您介绍lol嘲讽语句,内容包括英雄联盟:游戏中嘲讽对手的话,lol怎么发嘲讽语句,lol怎么语言嘲讽对手。1.当盖伦与诺克萨斯之手遇见时,盖伦:德莱厄斯,你不是将军,你只是个屠夫! 2.剑魔遇到蛮子会说:泰达米尔,我最成功的作品。 3.德莱文

资讯

sql查看视图语句

阅读(5)

本文主要为您介绍sql查看视图语句,内容包括如何查看数据库中视图的sql语句,查询视图语句怎么写,sqlserver怎么查视图语句。视图可以被看成是虚拟表或存储查询。可通过视图访问的数据不作为独特的对象存储在数据库内。数据库内存储的是 SELE

资讯

汇编的条件语句

阅读(5)

本文主要为您介绍汇编的条件语句,内容包括用汇编语言解释if语句,汇编语言中的条件指令,汇编实现条件语句:两数不等则执行相等则跳过。无符号数条件转移指令je/jz zf=1 若相等或为零则转移jne/jnz zf=0 若不相等或不为零则转移 ja/jnbe cf=0

资讯

statafor循环语句

阅读(5)

本文主要为您介绍statafor循环语句,内容包括stata中循环语句的命令,stata中循环语句的命令,stata如何最总样本的子集进行循环语句。forvalues 语句数字的循环while 语句条件循环foreach 语句变量、暂元、文件等的循环 这道题应该用foreach,

资讯

关于有关英语句子

阅读(6)

本文主要为您介绍关于有关英语句子,内容包括英语优美句子摘抄,180句,英语句子大全,英语好句(越短越好)30句。1.Dont cry because it is over, smile because it happened. 不要因为结束而哭泣,