刚才在CU里面看到一个关于宏的帖子,不解,随查《linux内核情景分析》(其中的一小节),呵呵。
<1> #define DUMP_WRITE(addr,nr) do {memcpy(bufp,addr,nr); buf += nr ;} while(0)
如果如下 #define DUMP_WRITE(addr,nr) memcpy(bufp,addr,nr); buf += nr ;
或者 :#define DUMP_WRITE(addr,nr) {memcpy(bufp,addr,nr); buf += nr ;}
在有的情况宏定义的时候可能会出错。特别是if else 中容易出现语法错误。
<2> 为了提高数据结构的通用性,可以用宏对数据结构进行操作。
如 ;
#define INIT_LIST_HEAD (ptr) do {(ptr)->next= (ptr); (ptr)->pre= (ptr);}while(0)
当然也可以使用inline 函数。
<3> 一个求结构体首地址的宏:
写一个带参数宏get_struct_addr_from_member_addr(p, stru, m),能够根据任意结构实体的某一个成员的地址,算出该结构实体的地址,其中参数p是指向该成员的指针,stru是该结构体,m是该成员。
答案如下:
#define get_struct_addr_from_member_addr(p, stru, m)
( stru*)( (char*)p - (char*)&(((stru*)0)->m) )
主要是强制类型转换,以前看信号的时候,有把0,1,2强制类型转化成 struct * 类型的,不解,现在有点眉目了。嘿嘿。
刚下了一篇,发表的时候怎么没了,重新写了,没写大详细。晕.............
分享到:
相关推荐
在《C语言需要注意的地方》这篇文章中,作者分享了一系列常见的错误和陷阱,这些都是在学习和使用C语言过程中容易遇到的问题。下面我们将深入探讨这些知识点,帮助读者更好地理解和避免这些常见错误。 ### 1. 大小...
本文将基于提供的文件信息,详细阐述在C语言中进行模块化设计时应注意的关键知识点。 #### 一、头文件的作用与规范 头文件(通常以`.h`为后缀)在C语言模块化设计中扮演着至关重要的角色。它们主要用来声明函数...
在问到 C 语言相关的问题的时候,总是没几个人能完全答上我的问 题。甚至一些工作多年,简历上写着“最得意的语言是 C 语言”“对 , C 有很深的研究”“精通 C 语言”的人也答不完全我的问题,甚至有 , 个别人我问的...
### Keil中C语言与汇编语言混合编程需要注意的关键知识点 #### 1. C语言中嵌入汇编语言模块的方法 在Keil C环境中进行C语言与汇编语言的混合编程时,通常需要将特定的汇编代码块嵌入到C语言函数中,以实现对硬件更...
【单片机C语言编程应注意的问题】 在单片机开发中,C语言因其结构化、功能性及可移植性,常被选作编程语言。然而,单片机C语言与标准C语言有所不同,需要针对单片机系统资源进行适应性编程。下面我们将详细探讨几个...
- **安全注意事项的重要性:** 在使用C语言控制器模块之前,用户必须仔细阅读相关的用户手册及其关联手册,确保在充分了解安全事项的基础上进行正确的操作。这不仅涉及到C语言控制器模块本身的安全,还涵盖了整个可...
52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的指针 288 58. 链表的源码 291 59. 高...
- **注意事项**:使用 `#define` 时需要注意宏展开可能导致的问题,例如参数多次计算、缺少括号等问题。 2. **`typedef` 类型别名定义**: - **作用**:用于创建类型别名,使代码更具可读性。 - **示例代码**: ...
在Keil C环境下优化C语言代码是提高程序性能的关键步骤,尤其对于资源有限的嵌入式系统来说,优化显得尤为重要。以下是一些基本的优化策略: 1. **选择合适的算法和数据结构**: - 熟悉各种算法,如搜索、排序,...
除了上述基础概念和例子外,还有一些进阶的指针用法和注意事项需要掌握: - **空指针**: 有时候为了初始化指针变量,会将其设置为NULL,这称为空指针,表示该指针没有指向任何有效的地址。 - **野指针**: 如果一个...
C语言的实训成品,主要集中了数组,数组的嵌套,文件读写,简单的指针,数据结构和字符串的比较,注意输入的数据类型不要错,学号、电话是整型,姓名、地址、邮箱什么的是字符串,代码整体是没有问题的,只要把要...
C语言extern使用方法总结 在C语言中,extern关键字是一个非常重要的概念,它可以用来声明全局变量和函数,但是很多人却不太了解它的使用方法。在本文中,我们将详细介绍extern关键字的使用方法和注意事项。 声明和...
C语言寻找马鞍点的知识点主要包括以下方面: 1. 马鞍点定义:在矩阵中,如果存在一个元素它在其所在行是所有元素中...同时,也应该注意到代码优化和内存管理等方面的知识,这些都是编写高质量C程序时应该考虑的要素。
在使用指针进行内存管理时,需要注意以下几点: 1. **避免内存泄漏**:确保为动态分配的内存释放空间,避免内存泄漏。 2. **智能指针**:虽然C语言不支持智能指针这样的概念,但在实际开发中,可以使用一些技巧模拟...
"STM32注意的地方" STM32 是一款功能强大且流行的微控制器,学习 STM32 需要注意一些重要的知识点。本文将对 STM32 的一些重要方面进行详细的解释。 首先,STM32 的 AHB 主要负责外部存储器时钟,PB2 负责 AD,I/O...
地方前,在微机上广泛使用的C语言编译系统有Microsoft C、Turbo C 、Borland C等。虽然它们的基本部分都是相同的,但还是有一些差异, 所以请大家注意自己所使用的C编译系统的特点和规定
本文通过对C语言反编译的方法,分析了C语言不同数据类型的指针在内存中的存储,并说明了对它们的使用及需要注意的地方。 一、编译环境 所有示例程序均在i386环境下的Red Hat Linux 9.0上编译通过。 二、一个简单...