c语言复习之预编译(十四)
创始人
2024-04-30 03:44:45

在这里插入图片描述

1.以#开头的行,都称为编译器指令

  1. #define定义宏
  2. #if #else #elif #endif条件编译
  3. #ifdef #ifndef判断是否定义了某个宏
  4. #error错误
  5. #program设定状态或指定完成(编译器)
  6. #undef取消宏定义

2.预定义宏

  1. __LINE__行号
  2. __FILE__源文件名
  3. __DATE__创建日期
  4. __TIME__创建时间
  5. __FUNCTION__当前正在被访问的函数名(大项目查错误)—–>__func__

3.#define宏定义

  1. 定义形式:#define 宏名(一般为大写) stuff(替换内容)
  2. 使用宏定义相当于替换
  3. 注意:不能加分号
  4. 定义表达式时有歧义:

#define ar 2*5+1

则3*ar==31

所以可以这样定义#define ar (2*5+1)来避免歧义

4.带参宏

1.介绍

#define 宏名(形参表) stuff
//例: #define _sqrt(number) number*number
4^2---->_sqrt(4)
//通过带参宏定义申请内存的快捷方式----->函数不能传类型
#define calloc(size,type) calloc(size,sizeof(type))

2.带参宏和函数区别

  1. 在带参宏定义中,不会为形式参数分配内存(替换),因此不必指明数据类型

  2. 当调用频繁时带参宏的优势就明显了,因为函数调用有开销且要指定数据类型

3.带参宏实现foreach循环

#define foreach(_variable,_array) \
for(int _i=0,_cnt=0;_i

5.宏定义中的特殊符号

1.##连接

#define Teval(name) name##_tel
Teval(zk)----->zk_tel

2.#把参数转为字符串

#define to_string(val) #val
to_string(123456);----->不能把变量转为字符串,局限性大

3.#@把参数转为字符

#define to_char(val) #@val
to_cahr(abcd)---->最多保存4个----->输出d,小端存储

6.条件编译(整型)

#if #elif #else #endif(必须有)
#error
#ifdef 如果定义了则
#ifndef 没有定义则

7.#inlcude头文件包含

  1. 系统库头文件使用尖括号包含

  2. 自定义头文件使用双引号包含

  3. 防止头文件重复包含

    #ifndef
    #endif
    

8.#program计算机式操作系统特定的—>windows

  1. #program one—->防止头文件重复包含

    指定该文件在编译源码时仅由编译器包含(打开)一次

  2. #program message("")

    不中断编译的情况下,发送一个字符串文字量到标准输出

  3. #program warning(...)修改编译器的警告状态

    default   //将警告行为重置为默认值
    disable   //不发出指定的警告信息
    erroe     //将指定的信息视为错误
    once      //指定的警告只显示一次
    suppress  //抑制下一行的指定警告生成(只对下一行生效)//警告状态
    //1.保存  push,n(1<=n<=4)
    //2.恢复  pop
    

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...