#define outpdw(port, val) (*((volatile dword *)(port))=((dword)(val))) 19: 使用一些宏跟踪调试 ANSI标准说明了五个预定义的宏名。它们是: __LINE__ __FILE__ __DATE__ __TIME__ __STDC__ C++中还定义了 __cplusplus 如果编译器不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。
C语言宏的参数类型有以下几种: 常规参数:可以是任何类型的表达式,包括基本数据类型(例如int、float等)、指针、结构体等。 字符串参数:使用双引号括起来的字符串,例如:“Hello, World!”。 字符参数:使用单引号括起来的字符,例如:‘A’。 变参宏参数:使用省略号(…)表示,可以接受可变数量的参数。在宏的定义中...
2. 简化复杂的表达式:通过定义带参数的宏,可以将复杂的表达式简化为一个宏调用。3. 条件编译:虽然这不是宏的直接应用,但`#ifdef`、`#ifndef`、`#endif`等预处理指令常与宏一起使用,以实现条件编译。4. 类型定义:虽然C语言提供了`typedef`关键字来定义类型别名,但在某些情况下,宏也可以用来模拟类型定义...
对象式的宏,其实就是用一个符号常量来表示一组字面量(字面量列表),可以是1个或多个字面量。 使用方式:#define PI 3.14f 不好的习惯:重复定义2次,不影响编译通过。#define PI 3.14 #define PI 3.14 不好的习惯:类型相同,数值不同,以最后一个为准 #define PI 3.14 #define PI 3.15...
1.不带参数的宏: 源文件:C:\Users\Zero\Desktop\c\temp\macro.c #include <stdio.h>#definePI 3.1415//定义常量PIvoidmain(){ printf("PI常量的值:%f",PI); } 结果: 原因: 宏是预编译中的一种情况(我在前面也有说到), 而预编译主要就是替换,宏就是文本替换 ...
C语言宏定义是一种宏替换机制,它可以将一个标识符替换为一个代码片段。宏定义通常在程序中用来方便地进行常量定义或函数模板定义。在C语言中,宏定义有以下几种类型: 1. 简单宏定义 2. 带参数的宏定义 3. 带可变参数的宏定义 本文将重点探讨带参数的宏定义。
②宏名和参数的括号间不能有空格 ③宏替换之作替换不做计算,不做表达式求解 ④宏的哑实结合不存在类型,也没有类型转换 ⑤宏展开不占用运行时间,只占用编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值) 2. 宏定义易错点示例总结 #define 第一位置 第二位置 ...
1、#define宏定义 以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识...
C语言中,宏名没有类型,其参数也没有类型。宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任意类型的数据。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换。