宏定义的理解

编程入门 行业动态 更新时间:2024-10-09 09:17:57

宏<a href=https://www.elefans.com/category/jswz/34/1771289.html style=定义的理解"/>

宏定义的理解

宏定义的一般形式为: #define 标识符 字符串    (下面的例子以 #define PI 3.1415926 为例)

     #define宏定义不是语句,所以后面不用加分号,若加了分号,宏定义的时候会把分号算进去。

     宏定义的作用从定义开始(#define PI 3.1415926) 到源程序结束,若要在某处终止该宏定义的作用,可用 #undef PI命令。

     若宏明在源程序中用引号括起来,则预处理程序不对其作宏替换( 如 printf() 输出中的引号)。

     宏定义可以嵌套使用,宏定义的字符串可以有之前宏定义过的标识符,也可以有变量参数,但在程序执行时,变量需在该宏定义使用之前定义好。

     在带参数的宏定义中,字符串内的形参通常要用括号括起来,以避免出错 (因为 #define 宏定义是简单替换,会涉及到优先级问题,加和不加括号的优先级可能不一样)。 带参宏定义和带参函数很相似,但本质上是不同的。

下面是关于 #define 的用法:

     注意,带参宏定义依然是简单替换,搞不好容易错。下图中,第一次时,一行里进行两次 i++,所以5次 printf() 里只输出 3 次。

 

下面是关于 typedef 的用法:

#include<stdio.h>
typedef int NUM1;            // typedef 声明 整型类型
typedef int NUM2[100];       // typedef 声明 整型数组类型
typedef char* p;             // typedef 声明 指针类型
typedef int (*j)();          // typedef 声明 函数指针类型
typedef struct {             // typedef 声明 结构体类型int year;int month;int day;
}DAY; // DAY 是结构体名称,可用结构体名称来定义外部变量,即DAY 等于struct DAYint max(int a,int b){int c;c = (a > b) ? a : b;return c;
}void main() {int l;NUM1 num1[100] = { 1,2,3 };NUM2 num2 = { 4,5,6 };DAY Day;p q;j k;q = "abcd";Day.year = 2002;Day.month = 4;Day.day = 30;printf("\ntypedef 声明整型类型:\n");printf("%d  %d\n", sizeof(NUM1), sizeof(num1));printf("%d\n", num1[1]);printf("\ntypedef 声明整型数组类型:\n");printf("%d  %d\n", sizeof(NUM2), sizeof(num2));printf("%d\n", num2[1]);printf("\ntypedef 声明结构体类型:\n");printf("%d-%02d-%02d\n",Day.year,Day.month,Day.day);printf("\ntypedef 声明指针类型:\n");printf("%s\n", q);printf("\ntypedef 声明函数指针类型:\n");k = max;  // 将函数的地址赋给函数指针 kprintf("\n%d\n", (*k)(2, 5)); // 通过函数指针执行函数printf("%d\n", k(2, 5));
}

更多推荐

宏定义的理解

本文发布于:2024-02-13 10:02:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1758176.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:定义

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!