1. 计算机编译系统对宏定义在编译时进行语法检查这句话为什么错
第一步被换为area=a*b。
宏定义末尾不加分号,减少输入错误和便于修改。宏替换在编译前进行,不做表达式求解函数调用在编译后程序运行时进行,只占编译时间。
除了一般的字符串替换,函数调用不会。
宏展开不占运行时间,不分配内存。
宏的哑实结合不存在类型,作用域为其后的程序,还要做参数代换。
格式:数组大小常用宏定义。
预处理是在编译之前的处理。
宏定义又称为宏代换;
",利用宏则可以设法得到多个值。
宏展开使源程序变长。
函数只有一个返回值,预处理不做语法检查。一切以换为前提,准确理解之前就“换”;宏"1;第一步换为area=r*r;
正确的宏定义是#define
S(r)
(r)*(r);
宏名和参数的括号间不能有空格;
宏替换只作替换:
#define
宏名(参数表)
字符串;
例如、值传递:
#define
标识符
字符串;
其中的标识符就是所谓的符号常量,b)
a*b;
area=S(3:
(1)宏名一般用大写;
(2)使用宏可提高程序的通用性和易读性,也没有类型转换,第二步被换为area=3*2,而编译工作的任务之一就是语法检查:将宏名替换为字符串.带参数的宏、做任何事情之前先要换,并且分配内存。
预处理(预编译)工作也叫做宏展开;中永远不包含宏。
(3)宏定义不分配内存;
(4)宏定义写在函数的花括号外边;
,不做计算:
#define
PI
3,第二步被换为area=a+b*a+b:
(5)实参如果是表达式容易出问题:
#define
S(r)
r*r
area=S(a+b)。
即在对相关命令或语句的含义和功能作具体分析之前就要换;
类似于函数调用。
格式.1415926。
把程序中出现的PI全部换成3。
(6)可以用#undef命令终止宏定义的作用域。
(7)宏定义可以嵌套。
(8)字符串",变量定义分配内存,通常在文件的最开头。1415926说明,也称为“宏名”,简称“宏”、宏替换。
2. 宏替换是在程序编译时完成的,不占用程序运行时间
是正确的,编译时预处理,不分配内存空间
3. C语言中宏替换占不占用运行时间
1.
宏替换不占用运行时间。宏替换是在编译时,编译器完成的。占用编译时间。
2.
编译时,编译器会将代码中的宏用对应定义好的代码进行直接替换,然后再对源代码进行编译。
3.
所以宏比函数在运行时更快,因为它不用像函数调用时,要对现有数据进行入栈保存,运行完后,在出栈恢复;它是直接编译好的代码。
4. C语言宏定义效率问题
先回答你第二个问题编程编程就是要生成程序 把你写的代码变成程序的过程就是编译 代码本身就是一堆文字而已运行就是你执行这个程序第一个问题宏定义不是什么都能做的 它跟函数有本质区别如果功能不复杂而且可以用宏定义实现的话那一般是宏定义效率更高因为调用函数要有参数压栈 过程记录保存 返回 过程记录的返回等额外开销不过这里你可能会产生一点误解 我也给你讲不了了 没办法 慢慢积累吧
5. 谭浩强的书上说宏替换不占运行时间,只占编译时间,可宏替换不是在预处理时就解决了么不会占用编译时间吧
不占用
程序从源码到可执行文件,主要包括以下几个过程:预处理器进行预处理(预处理器),接着有时候可能进行预编译,接着是编译(编译器),接着是连接(连接器)(产生可执行文件)。不过现在的好多集成平台都把前面三步放到一起了。
6. 宏替换只是字符替换,不占用编译时间是不是正确
宏是在预编译期间进行的,将代码中的指定字符转换
转换结束后,再进行编译
所以不占用编译时间
7. c语言中 关于预处理和宏替换是否编译编译
宏不会被compiler直接作为代码编译,你可以把它理解为一种编译器处理源代码的方式,比如#define CONST_NUM 10这样,后面代码里所有用CONST_NUM的地方都会在编译时被替换成10这个数,预处理呢,根据你定义的不同宏,比如定义了DEBUG,后面有两大段代码,
#ifdef DEBUG
XXX
#else
XXX
#endif
控制编译器具体去编译代码文件里的那部分代码这样,个人理解,希望能对你有些帮助。
8. c语言,说宏展开是在编译时进行的,啥意思啥叫编译时进行的
c语言编写出来的代码叫源代码,是供人看的,如果想让机器执行,需要转换成机器语言,这个转换过程就叫编译。
在c语言中定义的宏,在编译时,会展开(或叫替换)为实际的语句,如:
#define MAX 100
void main()
{
int a=MAX ;
printf("a=%d\n", a );
}
这里MAX是个宏,当编译时,这段代码就会变成:
void main()
{
int a=100; //这里的MAX会变成100
printf("a=%d\n", a );
}
这就是宏展开、宏替换,然后编译器,按这样子的源代码进行编译,生成执行程序
9. 在下列有关宏替换的叙述中,正确的说法是 A)宏替换占用运行时间
宏名用大写字母表示只是个习惯,大小写都行;
宏替换不占用运行时间,只占编译时间;因为宏替换发生在编译预处理阶段,预处理也是编译工作的一部分。
宏名无类型;
宏替换只是字符替换;
带参数的宏替换和函数不等价;
所以答案选D。
10. C语言:#define N 5 不占用运行时间,那么占用编译时间吗
是滴。宏定义不占运行时间,但占用编译时间。
宏是简单的文本替换,函数调用有开销的。 编译链接后才能运行!