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语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
177 5
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
存储 自然语言处理 编译器
【C语言】程序环境和预编译
【C语言】程序环境和预编译
|
4月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
1104 0
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
758 23
|
6月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
355 15
|
11月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
489 1
一文彻底搞清楚C语言的函数