C语言 define 关键字

1)取出两个数值中的最小值
#define MIN(A,B) (((A)>(B))? (B):(A))

2)用宏定义实现一个32 int类型变量 取绝对值
#define  ABS(n) (((unsigned int)n>>31 == 0x1) ? (-n):(n))
#define ABS2(n)  ((n ^ (n >> 31)) - (n >> 31))


3)在上面定义的基础上,进而可以实现不用大于号的方式实现比较两个变量的大小
#define MIN(A,B) (ABS((A)-(B)) == ((A)-(B)))? (B):(A)


4)重复包含头文件的问题
#ifndefined  __ABC_FILE_H__
#define __ABC_FILE_H__
//头文件内容
#endif

5)用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

二)关于宏定义 与 do{}while(0)


一下内容参考来源:http://www.spongeliu.com/415.html

eg.
#define SAMPLE(xxx) \
    do                            \
    {                               \
        if(1 != xxx)           \
            ...;                    \
    }while(0)


1、辅助定义复杂的宏,避免引用的时候出错 //是否可以用大括号代替 {}?
2、优化替代goto语句,实现对程序流程更好的控制
3、避免空宏引起的warning //是否可以用大括号代替 {}?
4、定义一个单独的函数块来实现复杂的操作 //是否可以用大括号代替 {}?

int foo()
{
    somestruct* ptr = malloc(...);
 
    dosomething...;
    if(error)
    {
        goto END;
    }
 
    dosomething...;
    if(error)
    {
        goto END;
    }
    dosomething...;
 
END:
    free(ptr);
    return 0;
 
}
int foo()
{
 
    somestruct* ptr = malloc(...);
 
    do{
        dosomething...;
        if(error)
        {
            break;
        }
 
        dosomething...;
        if(error)
        {
            break;
        }
        dosomething...;
    }while(0);
 
    free(ptr);
    return 0;
 
}
 

猜你喜欢

转载自blog.csdn.net/poject/article/details/84134594