×

宏是什么 c语言 语言

c语言中的“宏”是指什么?c语言贪吃蛇怎么让蛇自己动起来啊

admin admin 发表于2022-05-05 02:37:06 浏览116 评论0

抢沙发发表评论

c语言中的“宏”是指什么

宏是一种预处理指令,它提供了一种机制,可以用来替换源代码中的字符串。

1、条件编译:

C语言中,预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换,预处理过程还会删除程序中的注释和多余的空白符号。

预处理指令是以#开头的代码行,#必须是该行除了空白字符外的第一个字符。#后是指令关键字,在#和指令关键字之间允许存在若干空白字符。

使用宏进行条件编译的用法与使用宏防止多重引用类似。示例如下:

使用条件编译,方便程序员在调试程序的过程中,执行一些在程序发布后并不需要执行的指令。只要在需要调试的代码前加上_DEBUG的定义,就可以在调试程序的过程中输出调试信息。

这样方便查看程序在运行过程中有没有出现错误,定位错误出现的地方。而在程序发布之前,取消_DEBUG的定义就可以不再执行调试代码。

2、宏函数:

函数的调用是需要一定的时间和空间代价的。因为系统在调用函数时,需要保留“现场“,即将程序要执行的指令的下一条指令的位置压入栈,然后转入调用函数去执行,调用完函数后再返回主调函数,恢复“现场“,返回到栈里保存的的下一条指令的位置继续执行。-c语言

所以函数的调用需要额外的时间和空间代价。

而宏函数则不存在上述问题,宏函数在预编译时,同函数定义的代码来替换函数名,将函数代码段嵌入到当前程序,不会产生函数调用。

所以会省去普通函数保留现场恢复现场的时间,但因为要将定义的函数体嵌入到当前程序,所以不可避免的会占用额外的存储空间。

在频繁调用同一个宏的时候,该现象尤其明显。宏函数的示例定义如下:

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

宏函数的优点在于避免函数调用,提高程序效率。

同时需要注意的是inline标识符。inline也将函数定义为内联的。但是使用内联函数需要注意的是:函数体必须十分简单,不能含有循环、条件、选择等复杂结构,否则就不能作为内联函数了。

事实上,有时候即便你没有将函数指定为内联函数,编译器也会将一些简单的函数作为内联函数处理,而对于一些复杂的函数,即使声明为内联函数,编译器也不会理会的。

inline函数的瓶颈就在于此,使用inline标识符将函数声明为内联的,但这只是一种提示,到底编译器有没有优化还依赖于编译器的实现,而使用宏函数则完全由代码本身控制。

但在使用宏函数的时候,需要明确的是宏函数只是简单的替换,需要注意括号的使用。

扩展资料:

宏的更多规则特性:

(1)宏名一般用大写。

(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义。

(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。

(4)宏定义末尾不加分号。

(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。

(6)可以用#undef命令终止宏定义的作用域。

(7)宏定义不可以嵌套。

(8)字符串“ “中永远不包含宏。

(9)宏定义不分配内存,变量定义分配内存。

(10)宏定义不存在类型问题,它的参数也是无类型的。

参考资料:

百度百科--宏定义

c语言贪吃蛇怎么让蛇自己动起来啊

死循环+Sleep可以完成这个功能的比如说我现在定义了一个小方块,让他自动移动int i,j;int a={0};//用数组来覆盖整个运行界面int x=10,y=0;//定义一个x,y表示方块当前的位置while(1){ //清楚之前的输出信息 system(“cls“);//这是调用的命令行,作用是清屏 a[x][y]=1; //数组元素为1就表示在界面上的这个位置显示方块 //在屏幕上相应位置输出方块 for( i = 0; i《25 ; i++) for( j=0; j《80 ;j++) if(a[i][j]==0) printf(“ “); //等于0就表示该位置不是方块,输出一个空格 else printf(“%c“,2); //否则就输出这个方块 //然后重置这个数组,这个可以和上一个循环合并在一起 for( i = 0; i《25 ; i++) for( j=0; j《80 ;j++) a[i][j]=0; // 更改方块所在的位置 //向上 x=x-1; //向下 x=x+1; //向左 y=y-1; //向右 y=y-1; //上面的四句保留一句就可以了 //然后休息休息 Sleep(300);}基本算法就如代码所示具体的肯定和你向做的效果不一样比如说你要控制蛇的方向那改变位置的时候就需要判断而且,改变一条蛇和改变一个方块也不一样不过总体思路是这样子的仅作参考注意一点,Sleep函数是window头文件里面的需要导入window头文件如果不是Windows系统,请替换为相应的函数

C语言求答案

#include 《stdio.h》#include 《math.h》int main (){ double a,b,c,s,area; printf(“Enter a b c:“); // 因为是double类型的数据,要用lf while(scanf(“%lf %lf %lf“,&a,&b,&c)!=EOF){if( (a +b ) 《= c) continue;if( (a +c ) 《= b) continue;if( (b +c ) 《= a) continue; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“area=%lf“,area); } return 0;}