首页
学习
活动
专区
圈层
工具
发布

【C语言】预处理

一、预处理符号 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循...ANSI C,其值为1,否则未定义 以上是C语言设置的一些预定义符号,是可以直接使用的,预定义符号在预处理阶段处理 二、#define定义常量 基本语法: #define name stuff 例子:...然后其他代码使用小写,这样可以很好的区分宏、函数以及其他代码 九、#undef #undef 可以移除一个宏定义,如果现存的一个名字需要被重新定义,那么就使用它进行移除 #undef NAME 十、命令行定义 许多C的编译器提供了在命令行中定义符号的能力...#endif //常量表达式由预处理器求值。 //如: #define __DEBUG__ 1 #if __DEBUG__ //.....c语言给我们很多预处理指令,我们工作的过程中可能会用到,大家自行查找学习 今日分享就到这里了~

64510

C语言_预处理

C语言_预处理 文章目录 C语言_预处理 0.引言 1.#include 2.#define (符号常量) 3....#error和#pragma预处理命令 6.#和##运算符 0.引言 C的预处理是在程序被编译之前执行的,包括将其他文件包含进正在编译的文件,定义符号常量和宏,条件编译和有条件的执行预处理命令。...预处理命令都以 # 开头。 1.#include 功能:将指定文件的一个副本包含到命令所在位置上 形式:#include ​ #include"filename" 区别:查找文件的起始位置不同。...#define(宏) 宏 ,是#define预处理命令定义的一种标识符,宏的定义可以带实参,也可以不带。...#error和#pragma预处理命令 格式:#error tokens 功能:打印出包含命令中指定标记的信息,具体内容和系统的实现有关。 ​

1.7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C语言】预处理详解

    前言 上篇博客我们总结了编译与链接,有说过编译里第一步是预处理,那本篇博客将对预处理进行进一步的详细的总结 个人主页:小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 1....预定义符号 C语言设置了一些预定义符号, 可以直接使用 ,预定义符号也是在 预处理期间 处理的。...,其值为 1 ,否则未定义 我们来看一下,在vs2022中是否遵循ANSI C(标准C) 由此可见,vs2022不遵循ANSI C 注:预定义符号在预处理间就被替换了 2....所以语言本身没法帮我们区分二者。 那我们平时的一个习惯是: 把宏名全部大写 函数名不要全部大写 当然也有小写的宏,例如: 9....,但肯定有些地方挖的不够深,如果想更加详细的了解这方面的点点滴滴,我们可以参考《C语言深度解剖》 OK感谢观看!!!

    80510

    C语言:预处理详解

    一、预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。...对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。...的区别 #define与typedef大体功能都是使用时给一个对象取一个别名,增强程序的可读性,但它们在使用时有以下几点区别: 1、原理不同 #define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换...十四、其他预处理指令 #error //当预处理器预处理遇到#error命令时停止编译并输出用户自定义的错误消息 #pragma//用于指示编译器完成一些特定的动作 //(1) #pragma message...参考书籍:《C语言深度解剖》

    1.2K10

    C语言预处理详解

    引言 C语言的预处理指令是编程中的一项强大功能,它们在编译器处理代码之前,由预处理器执行。这些指令能够改变源代码的内容,从而提供了一种灵活的代码管理方式。...本文将详细介绍C语言中的预处理指令,包括它们的用法、作用和注意事项。 一、预处理器的基本概念 预处理器是C语言编译器的一部分,它负责处理源代码中的预处理指令。...预处理指令以井号(#)开头,它们不是C语言的语句,因此不需要以分号(;)结尾。  二、预定义符号 在C语言中,预处理器提供了一些预定义符号(预定义宏),这些符号在编译过程中由编译器自动定义。...宏定义、条件编译和头文件管理是预处理器的核心功能。理解这些功能可以帮助你在编写复杂的C语言程序时,优化代码结构和处理跨平台兼容性问题。...希望这篇博客能帮助你深入理解C语言的预处理器,提升你的编程技巧!

    96710

    【C语言】预处理详解

    前言: 这一篇的内容基本是和上一篇预处理的拓展起来的,建议合在一起看: 《编译与链接全揭秘:从源代码到可执行文件》 一、预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的...("the value of i is %d\n", i); printf("the value of c is %c\n", c); printf("the value of f is %f\n"...= 'c'; float f = 5.20f; PRINT(i, %d); PRINT(c, %c); PRINT(f, %f); return 0; } 当我们以这样的方式调用的时候: PRINT...所以语言本身没法帮我们区分二者。 那我们平时的⼀个习惯是: 把宏名全部大写 函数名不要全部大写 在前面的代码示例中,我也是保持这样的写法。 九、#undef 这条指令用于移除⼀个宏定义。...总结 对于预处理,我们就说到这里。 而对于C语言的语法知识,我们也就更新完毕,后面我会再分享用C语言实现几个小游戏。请耐心等待,谢谢支持!!! 码字不易,还请一键三连,谢谢!!!

    46010

    C语言预处理详解

    预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。...命令⾏定义 许多C 的编译器提供了⼀种能⼒,允许在命令⾏中定义符号。⽤于启动编译过程。 例如:当我们根据同⼀个源⽂件要编译出⼀个程序的不同版本的时候,这个特性有点⽤处。...#endif //常量表达式由预处理器求值。 如: #define __DEBUG__ 1 #if __DEBUG__ //.....件中将test.h包含5次,那么test.h⽂件的内容将会被拷⻉5份在test.c中。...其他预处理指令 #error #pragma #line 倘若诸位对此领域怀有浓厚的兴趣,那么推荐您去研读《C语言深度解剖》这本著作,它必将为您带来深邃的启迪与无尽的收获。

    71410

    C语言---预处理详解

    1.预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。...当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索 宏是不能出现递归的,不能在宏内自己调用自己 #define M 15 #define max(x,y) ((x)>(y)?...这种替换的⽅式很简单:预处理器先删除这条指令,并⽤包含⽂件的内容替换。⼀个头⽂件被包含10次,那就实际被编译10次,如果重复包含,对编译的压⼒就⽐较⼤。...如果直接这样写,test.c⽂件中将test.h包含5次,那么test.h⽂件的内容将会被拷⻉5份在test.c中。如果test.h ⽂件⽐较⼤,这样预处理后代码量会剧增。...在查找策略上不同 前者针对标准库头文件的引用 后者针对的是本地我们自己创建的文件的引入 13.其他预处理指令 #error #pragma- #line ... 不做介绍,⾃⼰去了解。

    58710

    C语言之预处理

    预处理器会在系统的标准库目录中查找头文件。 不需要指定路径,也不需要引号。 - 包含用户自定义头文件 #include "文件名" 特点: 用于包含用户自定义的头文件。...预处理器会先在当前源文件所在的目录查找头文件,如果找不到,再在系统的标准库目录中查找。 需要使用双引号"",并且可以指定相对路径或绝对路径。...三.预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。...__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C,...当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。 4.4带有副作用的宏参数 #define MAX(a, b) ( (a) > (b) ?

    37710

    C语言预处理超详解

    预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。...FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI C,...return 0; } 解决这道题需要知道预处理之后的结果是什么: z = ( (x++) > (y++) ?...命名约定 一般来讲函数的宏的使用语法很相似,所以语言本身没法帮我们区分二者。 那我们平时的一个习惯是: 把宏名全部大写 函数名不要全部大写 9. #undef 这条指令用于移除一个宏定义。...《高质量C/C++编程指南》中附录的考试试卷 笔试题: | 1.头文件中的 ifndef/define/endif是干什么用的? 2.

    67810

    【C语言】预处理详解(上)

    其中,编译又包括了预处理、编译和汇编。当时,我只是粗略的讲解预处理的过程,那么本文将会带着大家去领略预处理的各项操作。还有一些预处理的奇葩操作。 1....预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理阶段就被直接替换掉了。...预处理符号: __FILE__ //意思:进行编译的源文件 __LINE__ //意思:显示该代码语句所在的行数 __DATE__ //意思:文件被编译的日期 __TIME__ //意思:文件被编译的时间...__STDC__ //意思:如果该C编译器完全遵顼ANSI C的标准,则其值为0。...当预处理器搜索#define定义的符号的时候,字符串常量的内容不在搜索范围。 限于篇幅的原因,本文就像先讲到这里。后续的内容都在预处理详解(下)中,欢迎大家指点一二。

    68810

    C语言预处理操作详解

    这篇博客和大家分享一下C语言中的预处理操作。 1. 预定义符号 C语言设置了⼀些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。...在预处理器替换文本时,x变成了a+1;所以这条语句就变成了: printf("%d",a+1*a+1); 在宏定义上加上两个括号问题就解决了: #define SQUARE(x) (x)*(x) 这样预处理之后就解决这个问题了...//省略一些常规代码 a=5; b=9; c=MAX(a++,b++); printf("%d %d %d",a,b,c); 输出结果是什么呢?我们调试一下看看结果:  为什么不是5 9 11呢?...其实在c=MAX(a++,b++)这条语句被替换成了下面这条语句: c=(a++)>(b++)?...所以语言本⾝没法帮我们区分⼆者。我们平时的一个习惯就是:把宏的名字全部大写,函数名不要全部大写。 9.

    27810

    C语言中的预处理

    1、 宏定义 预处理命令可以改变程序设计环境,提高编程效率,它们并不是 C 语言本身的组成部分,不能直接对 它们进行编译,必须在对程序进行编译之前,先对程序中这些特殊的命令进行“预处理” 。...C 语言提供的预处理功能有三种,分别为宏定义、文件包含和条件编译,下面将对它们进行简 单介绍。...在 C 语言中,宏分为 有参数和无参数两种。...无参宏的宏名后不带参数,其定义的一般形式为: #define 标识符 字符串; 其中“#”表示这是一条预处理命令(在 C 语言中凡是以“#”开头的均为预处理命令)“define”为宏定义命令,“标识符...4、 其他与处理命令 #error 等其他常用预处理命令 除了上面介绍的之外,C 语言还有#erroe、#line、#pragma 等其他常用的预处理命令,在很多 C 语言的 程序中也是经常可见的

    1.8K60

    初识C语言·预处理详解

    1 预定义符号 C语言里面设置了预定义符号,在预处理阶段就被处理,有以下符号: __FILE__//进行编译的源文件 __LINE__//文件当前的行号 __DATE__//文件被编译的日期 __TIME...__//文件被编译的时间 __STDC__//是否支持ANSI C标准 使用就是直接打印就好了,因为VS是不支持ANSI C标准的,支持的话返回值就是1 int main() { printf("...9 命令行定义 许多C 的编译器提供了⼀种能⼒,允许在命令⾏中定义符号,⽤于启动编译过程。...return 0; } VS里面这段代码肯定是会报错的,但是在Linux环境下的gcc编译器就可以实现命令行定义,在实现编译的时候我们加上如下指令: gcc -D ARRAY_SIZE=10 programe.c...或着是: #pragma once 也可以避免头文件的多次引用,这是其他的预处理指令了,有兴趣的话可以多了解一下 #error #pragma #line 这些是一部分预处理指令,有兴趣君可自行探索。

    58510

    C语言——环境与预处理

    链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中 2.2 编译的多个阶段 预处理 选项 gcc -E test.c -o test.i...预处理完成之后就停下来,预处理之后产生的结果都放在test.i文件中。...,我们再来观察一下 test.s 在观察 test.s 时我们发现很难读取 而其实在这个编译阶段是将C语言代码翻译成了汇编代码 语法分析 词法分析 语义分析 符号汇总 汇编 汇编就是把汇编代码转化成二进制的指令...当预处理器搜索 #define 定义的符号的时候,字符串常量的内容并不被搜索。...则无法再进行编译 #ifndef __TEST_H__ #define __TEST_H__ //头文件的内容 #endif 或者使用我们之前碰到过的代码 #pragma once 四.感谢大家观看 好了,C语言的程序环境和预处理就讲到这里

    47110
    领券