宏定义1

一、宏定义的规则和使用解析

  • 宏定义的解析规则是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换。
  • 宏定义可以被递归替换,直达替换出来的值本身不再是一个宏为止。
  • 一个正确的宏定义的分为三部分,宏名在替换体前面。
  • 宏可以带参数称为带参宏,带参宏的使用和带参函数非常类似,但使用上有差异。每一个参数在宏体中引用时都必须加括号整体也要加括号。
#define M 10
#define N M
int main(void)
{
        int a[N]={1,2,3}; 
        retutn 0;
}

预处理后:

int main(void)
{
        int a[10]={1,2,3};    
        retutn 0;
}

带参宏

#include <stdio.h>
#define X(a,b) a+b
int main(void)
{
        int x=1,y=2;
        int c=X(x,y);
        int d=3*X(x,y);
        printf("d=%d.\n,d");    
        retutn 0;
}

预处理后:

int main(void)
{
        int x=1,y=2;
        int c=a+b;
        int d=3*a+b;   //出错
        printf("d=%d.\n,d");    
        retutn 0;
}

二、宏定义示例1:MAX

  • 求两个数中较大的那个。
  • 想到三目运算符来完成。
  • 注意括号的使用。
#include <stdio.h>
#define MAX(a,b) (((a)>(b))?(a):(b))
int main(void)
{
        int x=3,y=4;
        int max=MAX(2+x,y);
        printf("max=%d.\n,MAX"); 
        return 0;
}

三、宏定义示例2:SEC_PER_YEAR

  • 计算一年有多少秒。
  • 当一个数字直接出现在程序中,它的类型默认是int。这个数字刚好超过了int的存储范围。
#define SEC_PER_YEAR (365*24*60*60UL)
int main(void)
{
        unsigned int i=SEC_PER_YEAR;
        return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容