C语言中的一些宏定义和常用的函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daaikuaichuan/article/details/85251232

一、typeof 关键字

  如果你是 C++ 程序员,应该接触过 C++11 里的 decltype 操作符,它的作用是自动推导表达式的数据类型,以解决泛型编程中有些类型由模板参数决定而难以(甚至不可能)表示的问题。其实这个特性在 C 语言中也早有类似的实现,GNU C 标准中的一个扩展特性 typeof 作用与 decltype 类似

__typeof__ (ret) errnum = (ret); 

二、snprintf()函数的作用

#include<stdio.h>
int snprintf(char* dest_str,size_t size,const char* format,...);

【函数功能】:
  先将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至dest_str中。

  如果格式化后的字符串长度小于size,则将字符串全部拷贝至dest_str中,并在字符串结尾处加上‘\0’; 如果格式化后的字符串长度大于或等于size,则将字符串的(size-1)拷贝至dest_str中,然后在字符串结尾处加上’\0’. 函数返回值是 格式化字符串的长度。

三、__builtin_expect的作用

__builtin_expect(errnum != 0, 0)

  这个指令是gcc引入的,作用是"允许程序员将最有可能执行的分支告诉编译器"。这个指令的写法为:__builtin_expect(EXP, N)。意思是:EXP==N的概率很大。一般的使用方法是将__builtin_expect指令封装为LIKELY和UNLIKELY宏。

四、C语言中常用的预定义

__LINE__:当前程序行的行号,表示为十进制整型常量
__FILE__:当前源文件名,表示字符串型常量
__DATE__:转换的日历日期,表示为Mmm dd yyyy 形式的字符串常量,
Mmm是由asctime产生的。
__TIME__:转换的时间,表示"hh:mm:ss"形式的字符串型常量,
是有asctime产生的。(asctime貌似是指的一个函数)
__STDC__:编辑器为ISO兼容实现时位十进制整型常量
__func__:它指示所在的函数
__assert_perror_fail:打印一条包含错误码ERRNUM的错误消息,并终止程序

五、反斜杠的作用

  反斜杠起到换行作用,用于宏定义和字符串换行。其中宏定义中使用居多。如果一行代码有很多元素,导致太长影响阅读,可以通过在结尾加\的方式,实现换行,编译时会忽略\及其后的换行符,当做一行处理。

#define CHECK_ACTION_RETURN(expr) \
    if (!expr) { \
        printf(":failed(%d)\n", ret); \
        return ret; \
                } else { \
        printf(":ok\n"); \
                }

猜你喜欢

转载自blog.csdn.net/daaikuaichuan/article/details/85251232
今日推荐