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

相关文章
|
3月前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
存储 自然语言处理 编译器
【C语言】程序环境和预编译
【C语言】程序环境和预编译
|
19天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
39 10
|
19天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
42 9
|
19天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
31 8
|
19天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
40 6