C 预处理器和C库

  • 可变参数: 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"); //编译器查找反斜线后紧跟换行符的实例并删除这些实例,将以上两个物理行转换成一个逻辑行
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值