结构体内的#define宏定义

C语言知识总结——宏,枚举,结构体,共用体 1、define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。因此... 阅读详情

关于宏的作用域

1.     宏没有可见域。

        如果说有,那就是从本文件(包括被包含的文件)中,该宏定义处开始,至文件的尾部或取消宏(#undef)为止。

2.     考虑一种特殊情况:

        一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告。可是如果不在结构体之内,名字重复可肯定是error。(未证实,可以做实验,而且可以把两处的宏定义成不同的值,会是什么情况?)

        定义在结构体之内的宏在结构体内可以隐藏定义在结构体之外定义的宏,如果都在结构体之外定义,那么就是定义了两个相同的宏,而一个在内,一个在外,则结构体内只看到内部定义的宏,而结构体外只看到外部定义的宏,跟变量的隐藏类似。

    宏的处理是在编译的预处理阶段完成的。预处理器根本就不认识什么结构体,在C语言编译器编译这个C文件中的结构体时,这个define语句已经不存在了。相应的,用到这个宏的地方,宏本身也已经替换成宏的值(这个宏展开)。大家可以用gcc -E命令来只做预处理而不编译,看看出来后的文件。

    至于为什么在结构体里头#deifne,是因为这个宏一般用于定义该结构体里头的标志位变量的可能的值,和结构体的这个变量密切相关。放在一起从逻辑上比较容易理解。


====

http://blog.youkuaiyun.com/shiniji_hh1126/article/details/6084658

c\c++: 为什么在结构体/枚举内定义宏 例一 例如:sock结构体,定义了很多这种宏,嵌套了一层的宏定义来引用__sk_common里的成员。 struct sock { /* * Now struct inet_timewait_sock also uses sock_common, so please just * don't add nothing before this first member (__sk_common) --acme */ struct sock_common __sk_common; #define 阅读详情

相关推荐

WhatsApp协议算法

我想其实有很多人还不太了WhatsApp群控,简单来说,它和我们常使用的微信聊天软件是类似的,只不过它是基于通讯录的,操作起来比较简单便捷,所以现在有很多国家都喜欢用WhatsApp。一般情况下,筛号不会造成账号被封的情况,但是呢,如果筛号的频率太快,就会被系统限制筛号能力,不再返回筛号结果,所以,筛号数量和速度一定要控制好。前天逛街突然灵光一现,为什么不试试多路访问呢,简单来说就是信道复用技术,马上跑回家,调取接口,接入通道,导入已经转换成协议的账号,成功登录!

2403_87755661的博客 1941

定义在结构体里面的宏

/* 1、宏定义在结构体里面,只是方便代码的阅读,一般这种情况,大部分是结构体里面有标志量,方便阅读。 2、在结构体里面定义一个宏,在结构体外面也可以定义同样的宏,如果两个宏的内容不一样,那么在使用的地方,哪个宏近就使用哪个。(编译会有警告) 宏就是替换,从上面开始,一直往后面替换。如果宏新定义了,那么就使用宏的新值继续替换。 */ #include <stdio.h> ...

asd892776222的专栏 2549

保姆级教程:DBeaver社区版安装与驱动配置(附阿里云镜像解决下载超时)

本文提供DBeaver社区版的保姆级安装教程,涵盖版本选择、安装路径设置到驱动配置优化。特别针对国内用户遇到的下载超时问题,详细介绍了如何配置阿里云镜像加速驱动下载,确保高效连接MySQL等主流数据库。

weixin_30430169的博客 479

宏定义#define,定义别名typedef,结构体struct,枚举enmu

#define,typedef,struct,emu是我们阅读单片机底层代码时最经常碰到几个概念。 首先分开解释一下 1.宏定义#define与定义别名typedef,它俩一起说,因为它俩的功能十分相似,具体的的用法不说了,注意一点: 宏定义#define为预处理指令在编译处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只在编译已被展开的源程序时才会发现可能的错误...

weixin_44479800的博客 911

Abaqus中使用Python提取裂缝数据并用matplotlib库绘图

ABAQUS后处理PYTHON二次开发代码:提取裂缝数据并用matplotlib库绘图

qq_42568527的博客 3470

门信号表达式_毫米波FMCW体制雷达的信号处理中的FFT等效为相干积累的解释

民用的77G或24G毫米波雷达目前普遍采用发射波形为一连串线性调频连续波(即所谓chirp信号,啁啾信号,线性调频波如果能够下变频到人耳可接收的频段,听起来很类似“啁啾”“啁啾”的鸟叫声)。一串前后相继的chirp信号与一段长时间的“空闲”组成一帧信号(比如汽车雷达整机厂普遍采用一帧为50ms)。用频谱仪观察chirp信号串,横坐标为时间,纵坐标为频率,如下图所示(此处引用TI产品手册...

weixin_39725756的博客 1948

Object-C学习(五):结构体(struct)、typedef、以及与#define宏定义的区别

结构体:   结构体是一种数据类型的组合和数据抽象。    基本格式如下:        struct complex_struct{            double x, y;        };    这样就定义了一个由两个double类型组成的结构体,complex_struct是标示符,这种标示符成为Tag,我们可以把它的整体看做一个类型名,如果你想声明一个这种类型的变量可以像声明其他

xushuxuan 2368

如何区分Info与CoWoS封装?

这篇文章主要从Info、CoWoS封装的定义、Interposer的种类以及Info、CoWoS封装的种类三方面进行了介绍,希望读者能够有所收获

wangyubo1的博客 7938

枚举(enum)、宏定义(#define)、结构体(struct)的拾遗

1、宏定义 1.1、不带参数的宏定义 #define 标识符 字符串 例如:#define PI 3.1415926 说明: (1)宏名一般习惯用大写字母表示,但并非规定,也可以用小写 (2)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量 (3)宏定义是用宏名代替一个字符串,也就是做简单的置换,并不做正确性检查。 比如如果...

鱼藏剑 1988

【树莓派安装Homeassistant及基本配置】

时隔一年,我又重新开始玩Homeassistant,发现其中奥妙无穷,惊喜不断。在我浅薄的认知中要学好嵌入式,必须玩过Homeassistant,并且玩出自己的名堂!因为这是最贴切实际的生活应用没有之一,每月更新使得唯有活水来;拥抱大千使得永葆青春的活力;鬼斧神工的操作精彩纷呈,可以堪称软件与硬件的完美落地!

vor234的博客 1万+

养龙虾之_因特尔UHD/ULtra/Arc核显跑大模型_安装ollama_跑qwen3.5:0.8b/9b_使用copaw1.0.1测试_并配置copaw技能效果炸裂---AI大模型应用探索0019

摘要:本文探讨了利用Intel UHD770核显运行大语言模型的可能性。通过使用Intel发布的ipex-llm项目工具包,成功在核显上运行了Qwen3.5系列模型。测试发现0.8B小模型运行流畅(3-5秒响应),但智能程度有限;而9B大模型虽然效果更好,但响应时间长达2分钟,且GPU/CPU占用率不高。实验证明Intel核显确实可以运行LLM,但实际效果和性能表现仍有提升空间,特别是对大模型的支持尚不理想。

添柴程序猿的专栏 230

C语言 枚举enum、宏定义#define、结构体struct的一种联合应用

#include &lt;stdio.h&gt; typedef enum ENUMDATE { first=0x01, second=0x02, third=0x03 }enumdate; //宏跨行,需要用续行符 #define DATEDE \ { \ first, \ second, \ third \ } ...

u013273161的博客 717

24、虚拟地理信息系统:技术与应用的全面解析

本文全面解析了虚拟地理信息系统(虚拟GIS)的技术架构与应用前景。文章从地理空间数据的增长出发,探讨了虚拟GIS在地形、建筑、天气等多维度数据的交互式可视化技术,重点介绍了全球层次结构、多分辨率模型、缓存分页机制及交互导航方法。系统已应用于天气分析、城市规划、应急响应等领域,并展望了未来在数据处理、模拟操作、移动可视化及智能城市、文化遗产保护等方向的发展路径与技术挑战。

v4w5x6的博客 88

宏定义#define 和该文件下使用到的结构体成员的名称一样,导致失败

在后面使用到了一个结构体变量,它的名称也刚好是和宏定义的名称相同,这样就导致变异失败了,原因是宏定义的优先级比较高,会优先替换该目录下的文件里面相同名字的变量,导致后面使用到这个名称的使用都会被替换掉,导致编译失败。这种写法也属于宏定义名称的不规范, 默认宏定义的名称要全大写,结构体的成员默认用小写,这样就能避免冲突。在文件头定义了一个这个宏定义。

qq_35120460的博客 701

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

define宏定义、指针及结构体

define宏定义、指针及结构体

qq_39459739的博客 581

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C语言 枚举(enum)、宏定义(#define)、结构体(struct)的一种联合应用

最近看到一种枚举、宏定义、结构体联合的应用,对我这种初学者很有帮助,所以总结一下记录在这,为以后方便查阅,有需要的朋友也可以做一个参考.实际操作就是用宏定义初始化接头体具体操作代码如下:#include<stdio.h> #include<stdlib.h> #include<fcntl.h> #include<string.h>typedef enum { date_head = 0x2

dsanmux的专栏 3715

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

#define、typedef 和 using之间的联系和区别

#define、typedef和using三者的联系与区别

Serven的博客 1万+

【C语言】宏定义 结构体 枚举变量的用法

补充学习一下C语言,方便STM32的学习

weixin_63135906的博客 2612

#define FLASH ((FLASH_TypeDef*) FLASH_BASE) 宏定义一个结构体变量指针实现对寄存器操作

((FLASH_TypeDef*) FLASH_BASE) 替换成 《==》 ( ( int * ) adr )#define FLASH ((FLASH_TypeDef*) FLASH_BASE) 就实现了定义一个。首先结构体定义比较好理解,只是 ((FLASH_TypeDef*) FLASH_BASE) 不太好理解。同理 ((uint32_t *)adr) 把adr替换成具体的地址,就实现了具体存放在某一内存地址的指针定义。对于单一地址更方便读写。

qq_50751535的博客 810

【C语言笔记】#define与typedef的区别?

1、#define #define是预处理指令,在编译时不进行任何检查,只进行简单的替换 宏定义的一般形式为: define 标识符 常量 这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符串等同,它不需要双引号。 举个例子 # include <stdio.h> # include <stdlib.h> # define URL "https://www.liuyao-blog.cn" # define NAME "小师弟" # define WeiX

果果小师弟的博客 1577

#define 与 typedef

point //结构体struct point 的别名。宏定义可以放在.h文件里,当包含该头文件时,该宏定义生效。此时的pfun_f 就可以代表一个返回值任意的函数指针。#define 你想要的名字 代表的值。typedef 已有的类型 新名字。等于 void * 函数名 (int)此时key_press 的值就代表1。指针类命名要注意,*要放进括号内。类型不转换,只是改了名字。

2301_76180290的博客 227

typedef和#define

typedef:在计算机编程语言中用来为复杂的声明定义简单的别名(给类型起别名,整体类型替换),它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中 语法格式:typedef 类型 别名   typedef char *String;//给指针类型char *起别名为String(右边替换左边)   Strin...

weixin_30435261的博客 63

C语言 typedef 和define

1、typedef typedef 声明提供了一个方式去声明标识符的别名。用来替换一个复杂的类型名。 typedef int int_t, int_arr[20]; // 声明int_arr 是int[20] 的别名 // 声明 int_t 是int 的别名 typedef char char_t, *char_p, (*fp)(void); // 声明 char_t 为char 的别名 // 声明 char_p 为 cha

qq_34128332的博客 188
上一篇: Sizeof与Strlen的区别与联系
下一篇: C 语言常见问题集
Alan0521
博客等级 码龄19年 77粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值