c语言复习之预编译(十四)

简介: c语言复习之预编译(十四)

344a3555be174fcd83cbcc6bc887c37f.png

目录

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

2.预定义宏

3.`#define`宏定义

4.带参宏

1.介绍

2.带参宏和函数区别

3.带参宏实现foreach循环

5.宏定义中的特殊符号

1.`##`连接

2.`#`把参数转为字符串

3.`#@`把参数转为字符

6.条件编译(整型)

7.`#inlcude`头文件包含

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

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宏定义

定义形式:#define 宏名(一般为大写) stuff(替换内容)

使用宏定义相当于替换

注意:不能加分号

定义表达式时有歧义:

#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<sizeof(_array)/sizeof(_array[0]);_i++,_cnt=0) \

for(_variable=_array[_i];_cnt<1;_cnt++)

//把元素保存到_variable中,然后输出

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

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

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

#program message("")

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

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

default   //将警告行为重置为默认值

disable   //不发出指定的警告信息

erroe     //将指定的信息视为错误

once      //指定的警告只显示一次

suppress  //抑制下一行的指定警告生成(只对下一行生效)

 

//警告状态

//1.保存  push,n(1<=n<=4)

//2.恢复  pop

版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_72157449/article/details/128430676

相关文章
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
存储 自然语言处理 编译器
【C语言】程序环境和预编译
【C语言】程序环境和预编译
|
2天前
|
C语言
C语言5 字符输出函数和格式输出函数
C语言5 字符输出函数和格式输出函数
6 1
|
3天前
|
算法 编译器 C语言
深入浅出C语言—【函数】下
深入浅出C语言—【函数】下
|
15天前
|
Java C语言 C++
定义C语言的int main()函数
定义C语言的int main()函数
|
17天前
|
存储 移动开发 C语言
技术心得记录:嵌入式开发中常用到的C语言库函数
技术心得记录:嵌入式开发中常用到的C语言库函数
11 1
|
19天前
|
编译器 程序员 Serverless
函数(C语言)
函数(C语言)