c语言定义分数运算法则,C语言里#DEFINE的运算法则是啥啊急几急啊以题为例吧

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

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值