广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中#define预处理语法总结
  • 793
分享到

C语言中#define预处理语法总结

2024-04-02 19:04:59 793人浏览 泡泡鱼
摘要

目录一、使用#define定义标识符常量语法1:语法2:二、#define来定义带有参数的宏三、C语言给我们定义好的一些标识符常量一、使用#define定义标识符常量 语法1:

一、使用#define定义标识符常量

语法1:


#define MAX 100

注意使用#define末尾不需要带;

MAX是一个常量,是使用#define定义的一个标识符常量 !!!

我为什么要在这里强调这是一个常量呢?因为它和普通常量一样不可被修改

大家可能会疑惑使用const修饰的变量不也是不可被修改的吗,这两者有什么不同呢?

这里要强调一下,使用const修饰的变量叫做常变量,虽然指不能被修改,但其本质是变量

常量与常变量的不同:

这是尝试用编译器编译时报的错误

注意:

不要用#define去替代一个类型比如


#define INT int
 
int main(){
 
    INT a=10;
    return 0;
}

这样用#define没什么错,但是最好用typedef来给类型重命名即


typedef INT int;
 
int main(){
 
    INT a=10;
    return 0;
}

使用#define进行类型重命名的陷阱


#define  INT_PTK  int*
typedef  int*  INT_PTR;
 
int main() {
 
	INT_PTK a, b;
	INT_PTR c, d;
	//a,b,c,d中只有b不是指针,因为int *a,b;//b是整型
	// Typedef  int *  INT_PTR中的int*是一个完整的类型和float一样不可拆分
	return 0;
}

解释一下为什么只有b不是指针,编译时编译器会将INT_PTK替换为int* a,b;

注意其中int与*不是一个整体,因为这是#define的规则,它无法识别int*是一个整体,

于是*优先与a结合,结果其实是int *a; int b;

使用typedef自然没有这个陷阱

语法2:


#define MAX

可以看到这后面并没有跟数据,可是不跟数据的标识符常量的使用场景是什么呢?

使用场景:结合条件编译来使用


//这是一个自定义的头文件
 
#ifndef __define__
 
#define __define__
 
 
int Add(int x,int y)
{
	return x+y;
}
#endif

这样就可以防止在一个工程当中该头文件被重复包含了

二、#define来定义带有参数的宏

#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(Macro)或定义宏(define macro)。


#include<stdio.h>
#define MIN(x,y) (x>y?y:x)//#define来定义带有参数的宏,宏的定义
int min(int x, int y)//功能与上述宏相同
{
	if (x > y)
		return y;
	else
		return x;
}
int main()
{
	int b = 10, c = 19;
	printf("MIN=%d\n", MIN(b, c));
	printf("min=%d\n", min(b, c));
 
	return 0;
}

MIN(b,c)与min(b,c)功能一模一样,完成了对两个数据比较大小的功能

可见有时候使用宏比定义一个函数要省时省力的多(定义一个函数,哪怕这个函数再简单其在系统上的开销是不小的)

三、C语言给我们定义好的一些标识符常量

__FILE__ //进行编译的源文件

__LINE__ //文件当前的行号

__DATE__ //文件被编译的日期

__TIME__ //文件被编译的时间

__FUNCTION__ //进行编译的函数

__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义(VS不支持,GCc是完全遵循C标准的)

这些都是可以直接使用的

gcc编译器下

到此这篇关于C语言中#define预处理语法总结的文章就介绍到这了,更多相关C语言 #define预处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中#define预处理语法总结

本文链接: https://www.lsjlt.com/news/157505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中#define预处理语法总结
    目录一、使用#define定义标识符常量语法1:语法2:二、#define来定义带有参数的宏三、C语言给我们定义好的一些标识符常量一、使用#define定义标识符常量 语法1: ...
    99+
    2022-11-12
  • C语言预编译#define(预处理)
    目录一、预定义符号二、#define 定义标识符三、#define 定义宏四、#define 替换规则:五、#和## 两个符号(少见)六、宏和函数的对比七、#undef一、预定义符号...
    99+
    2022-11-13
  • 详解C语言#define预处理宏定义
    目录#define介绍: #define宏定义无参的一般形式为:#define  标识符 常量 #define宏定义有参的一般形式为:#define  标识符(参...
    99+
    2022-11-12
  • C语言超全面define预处理指令的使用说明
    目录前言#define 定义宏(无参)#define 定义宏函数宏的更多规则特性宏的缺点常见预处理指令前言 C语言中源代码到可执行文件的第一阶段,也就是预处理阶段,会检查源文件中的预...
    99+
    2022-11-13
  • C语言编程之预处理过程与define及条件编译
    目录名示常量#define重定义常量在#define中使用参数预处理器粘合剂:##运算符变参宏:… 和_ _ VAG_ARGS_ _宏与函数预处理指令#undef指令从C预处理器的角...
    99+
    2022-11-12
  • C语言指针用法总结
    1、先谈谈内存与地址 引例: 计算机的内存看成大街上的一排房屋,每个房屋都要有门牌号,这个就相当于计算机的内存地址,而房屋里面住的人、家具等等就相当于需要存放的各种各样的数据,所以要...
    99+
    2022-11-12
  • C语言预处理详解
    目录一,预定义符号二,#define1,#define 定义标识符2,#define 定义宏3,#define 替换规则三,##的作用1,概念2,带副作用的宏参数3,宏和函数对比四,...
    99+
    2022-11-12
  • C语言的预处理介绍
    目录前言一、预定义符号二、#define1.宏2.宏与函数3.带副作用的宏参数4.宏和函数的不同5.#undef三、条件编译四、文件包含总结前言 编译一个C语言程序涉及很多步骤。其中...
    99+
    2022-11-12
  • C语言中预处理有什么用
    这篇文章主要介绍了C语言中预处理有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。程序的翻译环境源文件被转换成可执行的机器指令时所处的环境称为翻译环境。由源文件(.c)转...
    99+
    2023-06-25
  • C语言语义陷阱超详细梳理总结
    目录1 指针与数组2 非数组的指针3 作为参数的数组声明4 空指针并非空字符串5 边界计算与不对称边界6 求值顺序7 整数溢出8 为函数提供返回值1 指针与数组 C语言中只...
    99+
    2022-11-13
  • 详解C语言之预处理(上)
    目录程序的翻译环境编译预编译:编译:汇编:链接合并段表:#define的用法1.#define定义标识符,例如2.#define定义宏  3.#define实现将...
    99+
    2022-11-12
  • 详解C语言之预处理(下)
    目录#define定义宏带副作用的宏参数#define定义宏的优点#define定义宏劣势预处理预定义符号预处理指令条件编译1.调试性代码2.防止重复的头文件多次编译总结#defin...
    99+
    2022-11-12
  • C语言数组全面总结梳理
    目录一,一维数组1.创建和初始化2.使用下标访问3.在内存中的存储二,二维数组 1.创建和初始化2.使用下标访问3.在内存中的存储三,越界问题数组(array)是由一系列类...
    99+
    2022-11-13
  • C语言中的关键字总结
    本篇内容介绍了“C语言中的关键字总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.关键字变更历史1999年12月16日,ISO推出了C9...
    99+
    2023-06-20
  • C语言预处理器使用方法讲解
    目录预处理器实例预定义宏预处理器运算符参数化的宏C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器...
    99+
    2022-12-30
    C语言预处理器 C语言预处理
  • 详解C语言中的预处理命令
    目录一、预处理命令简介二、宏定义1、宏定义的定义2、宏定义的使用3、宏定义的终止——#undef三、文件包含初学C语言的时候,我们会在开头写下一句话,#inc...
    99+
    2022-12-08
    C语言预处理命令 C语言预处理
  • C语言中有哪些预处理命令
    C语言中有哪些预处理命令,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一 #define命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代...
    99+
    2023-06-17
  • C语言中预处理的示例分析
    小编给大家分享一下C语言中预处理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!#define定义宏带副作用的宏参数我们来看如下一段代码结果分别为12,1...
    99+
    2023-06-25
  • 详解C语言的预处理效果
    目录前言一、预定义符号二、#define1.宏2.宏与函数3.带副作用的宏参数4. 宏和函数的不同5.#undef三、条件编译四、文件包含1.函数库文件包含2.本地文件包含总结前言 ...
    99+
    2022-11-12
  • C语言进阶教程之预处理
    目录一.代码运行是的两种环境二.翻译环境三.预定义符号四.#define1.define  定义宏2.带有副作用的宏参数五.#define定义宏 与函数对比六.预处理指令七...
    99+
    2023-02-10
    什么是预处理 c语言编译预处理命令 c语言预处理指令作用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作