若有宏定义 #define max(a,b)((a)>(b)?(a):(b))下面的表达式将扩展成什么是宏定义?max(a,max(b,c))

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
2013省二级C 选择题(含部分答案).doc16页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:100 &&
你可能关注的文档:
··········
··········
1、以下叙述错误的是(B)。
A、C源程序必须包含一个main
函数。 B、语句必须在一行内写完。
C、以一对“/*”和“*/”为定界符括起来的文字为注释部分。
D、所有语句都必须以分号“;”结束。
2、整型常量三种表示形式中不含(D)。
C、十六进制
3、以下表达式中,(B)无法正确表示右图所示的代数式: (a+b) a-c /3a
A、(a+b)/a* a-c /3
B、(a+b)* a-c /3*a
C、(a+b)* a-c / 3*a
D、(a+b)/ 3*a * a-c
4、运算符(C)不能用于非整型数据运算。
5、(A)可产生(0,0.9)之间的随机数。
%10/10.0 B、srand
6、能正确表示2 t 10的逻辑表达式是(D)。
C、t 2 || t 10
7、定义:int a 1,b 2, 语句c 1.0/b*4;
执行后,变量?c的值为(2)。
8、以下程序段的运行结果是(C)。
int x 10,y;
if x 20 y 9;
else if x 10 y 6;
else if x 5 y 3;
printf “%d\n”,
B、6 C、3 D、1
9、以下程序段的运行后sum的值为(D。
int i,j ,sum 0;
for i 1; i
J I 1 SUM 2
SUM 2+1+2 5 J 3 SUM 5+1+3 9
3; j++ I 2
J 2 SUM 9+2+2 13
J 3 SUM 13+2+3 18
sum sum+i+j; I 3
J 3 SUM 18+3+3 24 J 4
B、12 C、20 D、24
10、(B)语句能正确定义a为整型数组。
A、int a[n] ,n 10;
B、int a[10]; C、int n 10,a[n]; D、int a 10
11、以下程序段的运行结果是(C)。 int a[ ][4]
1,2,3,4,5,6,7,8,9,10,11,12 ; printf “%d\n”,a[0][0]-a[2][3] ;
B、10 C、-11 D、8
13、以下叙述错误的是(B)。
A、函数体内复合语句中定义的变量只在该复合语句内有效。
B、在一个程序源文件中定义的全局变量,在程序的其它源文件中必不
正在加载中,请稍后...我想知道c语言里面怎么区分函数与宏_百度知道
我想知道c语言里面怎么区分函数与宏
提问者采纳
MAX(a[n];}int main(){
max(9),可取的最大值。在编译预处理时;(b):(b)。而如果MAX是个函数式宏定义: MAX(a,则宏展开就成了k = (i&0x0f&gt。若函数中是宏替换为 ++MAX(a,4},max(n-1)),展开描述; 要编译生成指令,都用宏定义中的字符串去代换。宏代换是由预处理程序自动完成的,b) { return a&gt,预处理器只负责做形式上的替换,b) ((a)&gt,毕竟省去了分配和释放栈帧,8,0,所以传参时要格外小心,这个宏定义的外层括号也是不能省的,该字符串可以是常数?a,这个宏定义本身倒不必编译生成指令,运算优先级也是错了,时间复杂度会很高,则要展开成k = ((++a)&gt,2;(++b),5。(5)函数式宏定义往往会导致较低的代码执行效率,但是代码中出现的每次调用编译生成的指令都相当于一个函数体。  普通函数调用时先求实参表达式的值再传给形参。例如MAX(++a;int max(n){
return n==0,替换函数式宏定义时一定要仔细看好?(a);}(1)函数式宏定义的参数没有类型;(b),则普通函数的调用与函数式宏定义的替换过程是不一样的? a 。同样道理:int a[]={9,6?a[n],a和b就不一定是增加一次还是两次了。  如果MAX是个普通函数,我们称之为函数式宏定义。(2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同?a。若字符串是表达式:(++b)),代码中出现的每次调用也要编译生成传参指令和call指令、表达式,则通过递归: b,称为宏。但如果MAX函数式宏定义,7。宏定义是由源程序中的宏定义命令完成的。所以若参数是表达式,这样依此递归下去,那么这些SideEffect只发生一次,而不是简单的几条传参指令和call指令:  函数式宏定义, b) (a&gt,使用函数式宏定义编译生成的目标文件会比较大,如果实参表达式有Side Effect:j&0x0f),对程序中所有出现的“宏名”,a和b只增加一次,其中max(n-1)被调用了两遍,则宏展开就成了 ++(a)&gt,b),3:b,省去内层括号?i&0x0f:#define MAX(a在C及C++语言中允许用一个标识符来表示一个字符串?(++a)、传返回值等一系列工作;b,那函数式宏定义与普通函数有什么区别呢;
return 0。  如果上面的函数式宏定义写成 #define MAX(a。  看下面一段代码;b,时间复杂度为O(n)、传参,如果MAX是普通函数,运算的优先级就错了,1:b)。但若是函数式宏定义、格式串等,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现,而不做参数类型检查。(3)函数式宏定义要注意格式。所以;j&0x0f,那么它的函数体return a &gt?a[0],但只要小心使用还是会显著提高代码的执行效率;}  若是普通函数。  尽管函数式宏定义和普通函数相比有很多缺点, ++b); b 。(4)若函数参数为表达式,尤其是括号:max(n-1) );max(n-1)?(a),则宏展开为( a[n]&gt:(b))  普通函数
?我们以下面两行代码为例,这称为“宏代换”或“宏展开”
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
来自团队:
其他类似问题
为您推荐:
其他2条回答
一眼看去宏的名称一般是全大写字母加下划线,再去定义的地方查看,宏定义有#define 函数更明显
很简单,宏定义都有#函数都有返回类型,比如void,int,等
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言 我是初学者_百度知道
C语言 我是初学者
宏定义的全部内容要在同一行吗?
提问者采纳
&&&&&&&N&N&&;&&}&&nbsp.h&/*&&&printf(&&&0;return&&nbsp不用;#define&N);&&\&&#define&&\&nbsp,&main(void){&&#define&int&来换行;&&&\&&//等价于&%d\n&quot、可以用&&&如#include&&nbsp、;&&&&&nbsp,&&&N&nbsp、
提问者评价
其他类似问题
为您推荐:
其他3条回答
这个是冷门重点。。。
多行宏定义:
#define doit(m,n) for(int i=0;i&(n);++i)\
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义允许嵌套
(8)字符串& &中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。
(10)宏定义不存在类型问题,它的参数也是无类型的。
#define用法
1、 用无参宏定义一个简单的常量
#define L...
一般是同一行,便于阅读,如果太长的话就多写几个宏,把它包进来,比如#define a #define b a*当然我只是随便举个蹩脚例子
可以不在一行 可用 \ 符号换行
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁#define max(a,b) a&b?a:b中的?和:分别是什么意思啊_百度知道
#define max(a,b) a&b?a:b中的?和:分别是什么意思啊
提问者采纳
或者说a&b是否成立,则整个表达式返回冒号左边的值;b返回值是真还是假(1还是0)
如果返回真,也就是a 如果返回假,则整个表达式返回冒号右边的值这是条件表达式的一种特殊写法意思就是判断a&gt
提问者评价
其他类似问题
为您推荐:
其他2条回答
这是一个判断的字符组合,输出b这是一个宏定义,如果a&gt,则输出a,否则,可以在代码中直接调用;b
#define语句是一个宏定义a&b?a:b 是C语言的一个三目运算符类似于{
if(a&b)}“?”前面是一个bool表达式,为真取“:”前面的数,即a,为假取后面的数,即b
define的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 什么是宏定义 的文章

 

随机推荐