C语言里#DEFINE的运算法则是啥啊急几急啊以题为例吧
答案:5 信息版本:手机版
解决时间 2020-03-28 13:15
已解决
2020-03-27 16:00
#define X a+b
main( )
{ int a=3,b=4,s1;
s1=2*X;
printf("%d\n",s1);
}
那这个那???
#define M 5
#define N M+1
#define NN N*N-M
void main( )
{ printf("%d\n",3*NN);
}
全部回答
1楼
2020-03-27 21:44
#define的作用是直接替换。
S1=2×3+4=10。其中3+4为X
2楼
2020-03-27 20:26
1.简单的宏定义
格式:#define 标识符 替换列表
说明:替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。
注意:替换列表是可以为空的
典型错误:
#define n = 100
int a[n];
#define n 100;
int a[n];
#define pin (int*);
pin a,b;
int* a,b;
典型的使用方法:
使用宏定义可以自己根据自己的习惯来定义甚至改变c语言的语法习惯,例如:
#define begin {
#define end }
int main()begin
printf ("define----\n");
end
定义一个循环
#define loop for(;;)
重新定义数据类型
#define it int
2.带参数的宏
#define 标识符(x1,x2,x3...xn) 替换列表 (注意:x1,x2,x3..是宏的参数,标识符和其左括弧之间不能有空格)
使用方法:
#define max(x,y) ((x)>(y)?(x):(y))
i=max(j+k,m-n);
替换为:
i=max((j+k)>(m-n)?(j+k):(m-n));
#define si_ex(n) ((n)%2==0)
if(si_ex(i)) i++;
替换为:
if(si_ex((i)%2==0))
通过以上例子可以看出,标识符带参数(x1,x2,x3.....)在替换时会被替换列表(y1,y2,y3....)对应的替换,但是和顺序无关。
3.宏的特殊单行定义
#define a(x) t_##x
#define b(x) #@x
#define c(x) #x
x=1
替换为:
a(1)------> t_1 (t_##x,##符号是记号粘黏符号,将前后的字符粘黏起来。)
b(1)------> '1' ( #@x , #@ 符号会将宏的参数进行字符串字面量化,并且加‘’号)
c(1)------> "1" ( #x ,#符号会将宏的参数进行字符串字面量化,并且加""号)
4.define的多行定义
define可以替代多行的代码,在每一个换行的时候加上一个"\"
#define max(x,y) do { \
语句1; \
语句2; \
\
} while(0) \
5.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。
#ifdef windows
......
......
#endif
#ifdef linux
......
......
#endif
可以在编译的时候通过#define设置编译环境
6.取消宏
#undef 标识符
7.条件编译
#ifdef xxx…(#else) … #endif
8.预定义宏
在c语言中收录了一些有用的宏,这些宏是提供当前编译信息的。
__line__ 被编译文件的行数
(整型)
__file__ 被编译文件的名字 (字符型)
__date__ 编译日期 (字符型)
__time__ 编译时间 (字符型)
__stdc__ 如果编译器接受标准c,那么值为1. (整型)
通常在编译的时候可以用这些预定义的宏来进行排错,例如:
一般情况下,当出现除零的情况时编译器是没有提示的,可以自定义一个解决办法。
#define checkzero(divisor)\
if(divisor==0)\
printf("***attempt to divide by zero in line %d of file %s ***\n",__line__,__file__);\
引用方法
checkzero(j);
k=i/j;
3楼
2020-03-27 19:15
#define是一种预处理,分带参数和不带参数,#define X a+b是不带参数的,当下面程序中遇到X则替换成a+b。
4楼
2020-03-27 18:21
这个其实和用#define定义一个常量一样,意思是在遇到X时执行 a+b,类似于一个函数,但是它是定义的一个宏,意思是在整个程序中遇到X都将对变量a和变量b做加法运算,这里的X就相当于一个替代标志,没有类型(跟函数相比较而言,函数要么是空类型,要么是整型或者浮点数型等等)划分,就完全是等同于 a+b 这个式子。和这个定义一起看更容易理解:#define N 100,那么程序编译链接时遇到N就用100替代处理,你明白了么?
举个例子:
#define aaaa printf("\n")
void main()
{
int x,y,z;
x=1;
y=2;
z=x+y;
printf("%d",z);
aaaa;
}
上面程序等同效如下形式:
void main()
{
int x,y,z;
x=1;
y=2;
z=x+y;
printf("%d",z);
printf("\n");
}
在实际使用C语言编程的时候,可以将一些比较常用的操作或运算或简单函数甚至各种语句(当然系统保留的一些不能重定义啦)利用#define 来定义,也就是用#define 命令后面紧跟的标志符(如你的问题中的X和我的演示中的aaaa)来替代那些复杂的语句或者常量,这样一来可以比较节省编程和调试时间。在编译链接时(如果要生成可执行文件,在片上系统编程上不同,不过也大同小异),直接把定义的标志在程序代码中转换成所表示的部分,这个标志它本身实际就没有在程序运行中起作用,只是在编写代码的时候使得工作量减少了而已。
5楼
2020-03-27 17:21
你这个题应该是:#define X (a+b)
#define 是定义宏,宏可以带参数或不带参数。
1、不带参数的宏
比如:
#define N 6
#define X (a+b)
2、带参数的宏
#define X(a,b) a+b
注意:宏替换是在程序编译前完成,在宏替换时注意必须是“原样替换”,不能自己先计算。计算只是在编译过程中才做的事。
比如:
#define X(a,b) a+b
如果a=3; b=5; 则表达式 z=5*X(a,b)执行后,z的值为??
替换过程:z=5*a+b (原样替换进去)
计算过程(编译过程):z=5*3+5 结果为:20
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯