C 预处理器和C库

来源:互联网 发布:js清除浏览器缓存数据 编辑:程序博客网 时间:2024/06/05 23:33
  • 可变参数: stdarg.h
#include<cstdio>#include<cstdarg>//lim传入的值为传入参数的个数double sum(int lim, ...){  va_list ap;   //va_list 代表一种数据对象  double tot = 0;  va_start(ap, lim); //初始化 ap 为参数列表  for(int i = 0; i < lim; i++){    tot += va_arg(ap, double);  //获取参数, 后一个double表示获取参数的类型  }  va_end(ap);  //清理工作  return tot;}int main(){  double t = sum(5, 1.0,  9.1, 9.6, 4.45, 6.47);  printf("%g\n", t);  return 0;}
  • 诊断库: assert.h
#include<assert>assert(条件判断);  //当条件为true继续执行,当条件为false终止运行,输出错误信息//若想禁用assert()宏的机制,可在#include<assert> 之前加上#define NDEBUG
  • 通用工具库: stdlib.h
exit();    //退出程序atexit(* function); //传入参数为函数指针,注册该函数,在程序退出时执行该函数,可进行多次调用,符合先进后出
  • 内联函数
// 声明内联函数表示的是建议编译器尽可能快速的调用该函数//实现效果可能是函数调用的地方用函数体进行替换inline void eat(){  while(getchar() != '\n')    continue;}int main(){  eat();}
  • 可变宏: … 和 __VA_ARGS__

    #define PR(...)  printf(__VA_ARGS__)  //__VA_ARGS__ 用在替换部分,以表明省略号代表的内容PR("Howdy");PR("weight = %d, shipping = %d", wt, sp);
  • 预处理器的粘合剂: ##运算符

    #define XNAME(N) x##N
    XNAME(4) // 得到的结果为x4
    int XNAME(1) = 14; //等效为 int x1 = 14;
  • # 运算符

    #define PSQR(x) printf("The square of "#x" is %d\n", ((x) * (x)))
    PSQR(6); //输出为 The square of 6 is 36
  • \ 使用

    printf("That's wond\
    erful!\n"); //编译器查找反斜线后紧跟换行符的实例并删除这些实例,将以上两个物理行转换成一个逻辑行
原创粉丝点击