预处理,结构体

来源:互联网 发布:摄像头ip扫描软件 编辑:程序博客网 时间:2024/05/19 07:42

Q:宏定义的定义和类型。
A:宏定义是由源程序中的宏定义命令完成的,宏代换是由预处理程序自动完成的,在C语言中,宏定义分为有参和无参两种。无参宏宏名后不带参数,其定义的一般形式为:#define标识符 字符串;带参宏的参数为形参,其一般形式为:#define宏名(形参表) 字符串。
Q:无参宏的用途及其注意点。

A:无参宏常用于对程序中反复使用的表达式,例:#define M (y*y+3*y);该例中即用指定标识符M来代替M (y*y+3*y)。宏定义时需注意优先级的问题,确保定义内容满足所需。

宏定义是用宏名表示字符串宏展开时以该字符串取代宏名,是简单的替换,写在函数之外,如有错误,只能在编译已被宏展开后的源程序时被发现。
Q:带参宏的用途及其注意点。
A:带参宏调用时,用实参代替实参,宏名和形参表之间不能有空格出现。
Q:带参宏定义和自定义函数的区别。
A:在带参宏定义中,形参不分配内存单元,不需作类型定义;宏定义中实参有具体的值,要用它们代替形参,必须作类型说明。即带宏参中,只是符号代换,不存在值传递问题。宏定义中的形参是标识符,而宏调用中的实参可以是表达式。
Q:文件包含中””<>的区别。
A:文件包含中,用<>表示在包含文件目录中去查找,而不是在源文件目录中查找;用””则表示首先在当前的源文件目录中查找。文件包含允许嵌套,即在一个被包含的文件中可以包含另一个文件。
Q:条件编译的三种形式和各自功能。
A:第一种形式:

#ifdef标识符

程序段1

#else

程序段2

#endif
它的功能为若标识符被定义过,则编译程序段1,否则编译程序段2else可以不存在。

第二种形式:

#ifndef标识符

程序段1

#else

程序段2

#endif
它的功能与第一种相反,即若标识符未被定义过,则编译程序段1,否则编译程序段2else可以不存在。

第三种形式:

#if常量表达式

程序段1

#else

程序段2

#endif
它的功能为若常量表达式为真,则编译程序段1,否则编译程序段2else可以不存在。

Q:宏定义中的###.
A:宏定义中#的功能是将其后的宏参进行字符串化操作,##则是连接符,用于连接两个Token使之连接为一个Token,不一定用于宏的变量。

原创粉丝点击