C语言 宏的一些特殊用法

news/2024/11/7 14:34:50/

目录

一、undef

二、ifdef

三、ifndef

四、#if #elif #else

五、宏的特殊用法

5.1 输出不同类型的数据

5.2 offsetof


一、undef

用于移除宏定义:

#include<stdio.h>
#define MAX 100
int main()
{printf("%d",MAX);#ifdef MAX#undef MAX#endifprintf("%d",MAX);return 0;
}

第一行MAX正常输出,第二行MAX会报错,因为移除了MAX的定义

二、ifdef

此功能类似于if和define的结合,如果定义了....就执行某句话

#include<stdio.h>
#define MAX 100
int main()
{#ifdef MAXprintf("%d",MAX);#endifreturn 0;
}

三、ifndef

和ifdef的意思相反,如果没定义....就执行某句话

#ifndef __TEST_H__
//如果没有定义__TEST_H__
//定义__TEST_H__
//以后这条语句就不执行了,所以我们无法重复引用头文件了
#define __TEST_H__
#include<stdio.h>
#endif

在工程非常大的时候,我们难免无法避免会重复引用头文件,所以我们可以利用宏去实现此功能,同样我们也可以使用#pragram once去实现此功能,现代工程中我们更常用#pragram once。

四、#if #elif #else

该语句和if else if else是一样的意思

#include<stdio.h>
#define MAX 100
int main()
{#if 1>3printf("%d",MAX);#elif 1>2printf("hello world\n");#elseprintf("this is right!\n");#endifreturn 0;
}

五、宏的特殊用法

5.1 输出不同类型的数据

宏可以实现一些函数做不到的功能,例如打印不同类型的数据

#include<stdio.h>
#define PRINT(val,format) printf("the value of " #val " is "format"\n",val)
int main()
{int a=10;double b=20;char c='a';//=printf("the value of " "a" " is ""%d",a);PRINT(a,"%d");PRINT(b,"%lf");PRINT(c,"%c");return 0;
}

5.2 offsetof

offsetof是用来计算结构体的偏移量的,该方法只能用宏实现而不能用函数实现

#include<stdio.h>
#define OFFSETOF(type_s,m_name) (int)&(((type_s*)0)->m_name)
struct s
{int a;double b;char c;
};int main()
{printf("%d\n",OFFSETOF(struct s,a));printf("%d\n",OFFSETOF(struct s,b));printf("%d\n",OFFSETOF(struct s,c));
}


http://www.ppmy.cn/news/674046.html

相关文章

C语言宏使用的技巧

1. 简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了&#xff0c;它代表1000&#xff0c;如果在程序里面写 if(i<MAXTIME){.........} 编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。 这样的定义看起来类似于普通的常量定义CONST&#x…

c语言宏代码大全,C语言宏

本篇文章帮大家学习c语言宏&#xff0c;包含了C语言宏使用方法、操作技巧、实例演示和注意事项&#xff0c;有一定的学习价值&#xff0c;大家可以用来参考。 宏是一种可由宏的值代替的代码段。 宏由#define指令定义。 有两种类型的宏&#xff1a; 类似对象的宏 类似函数的宏 类…

C++宏编程技巧

下面的代码并非按照规范格式来写&#xff0c;仅作示范用途。 常用符号 ## 连接符&#xff0c;可将多个标识符拼接起来&#xff0c;组成一个完整的标识符。 //定义宏&#xff0c;用来打印整型变量 #define PRINT(x) printf("%d\n", a##x)int a1 1; int a2 2;PRI…

获取并设置鼠标位置 C语言

转自&#xff1a;YALI_xunzhen 编译环境&#xff1a;DEV C 4.9.9.2(及以上) 所在函数库&#xff1a;windows.h 格式&#xff1a; 读取鼠标坐标 GetCursorPos(一个POINT变量地址) 设定鼠标坐标 SetCursorPos(坐标x值,坐标y值) PS:将鼠标移到(x,y) 下面是例子&#xff1a;移…

C语言中宏(macro)的特殊用法

SimpleScalar的源代码中对macro的运用可以说是炉火纯青&#xff0c;丰富的macro使得代码简介&#xff0c;逻辑清晰&#xff0c;但是也给我这些初学者们阅读代码造成了障碍&#xff0c;下面将几篇找到的相关资料贴出来&#xff0c;希望能对大家有用 C语言中的宏(Macro)是最令人…

C语言宏的主要作用

宏主要有四大类作用&#xff1a; 1.和条件编译指令配合&#xff0c;进行条件编译. 比如: 1)头文件的防止多重包含机制. 2)根据不同编译器选择不同代码段. 2.对需要变动的常量进行控制. 比如: 控制定义数组的长度. 3.对应码(比如寄存器功能码、状态码、指令的参数码、一些协议的…

c语言的 宏

一、常规宏定义 在 C 语言中&#xff0c;可以采用命令 #define 来定义宏。该命令允许把一个名称指定成任何所需的文本&#xff0c;例如一个常量值或者一条语句。在定义了宏之后&#xff0c;无论宏名称出现在源代码的何处&#xff0c;预处理器都会把它用定义时指定的文本替换掉…

C语言控制和鼠标键盘 (windows环境)

C语言控制鼠标点击以及键盘输入 使用场景主要的几个函数介绍实例键盘输入对应值 使用场景 当需要实现一些重复的点击&#xff0c;或者自动输入的情况下&#xff0c;可以使用到类似的功能&#xff0c;例如网页的自动刷新&#xff0c;QQ的自动输入&#xff0c;&#xff08;嘴炮连…