C语言中offsetof宏的应用

1)

#define offsetof(s, m)   (size_t)&(((s *)0)->m)

2)

#define OBJECT_HEAD_ADDRESS(ClassName,MemberName,Addre) \
Addre - offsetof(ClassName, MemberName)

C语言中offsetof宏的应用

时间: 2024-11-05 20:29:44

C语言中offsetof宏的应用的相关文章

c语言中,宏和函数的区别

一.代码长度:宏是完全替换,插入到程序里使得代码变长: 函数代码是只出现在一个地方,使用时则去那里调用. 二.执行速度:宏更快一些,因为在预编译阶段都已完成: 函数则慢一点,因为需要调用以及返回(压栈/出栈)额外时间. 三.操作符优先级:宏有时要少加括号而导致计算逻辑出错: 函数最后只将值返回来,结果容易预测. 四.参数求值:宏每次都要计算: 函数只需要计算一次,之后多次调用并不会导致多次求值而出错. 五.参数类型:宏不关心类型,只要参数操作合法就可以: 函数类型要一致,不同类型则需要不同函数.

C语言中,宏和全局变量的区别是什么?

全局变量 是可以在程序中任何地方使用 而且是可以修改的 宏定义也可以在任何地方使用 但是不能在之后修改 数据类型没有限制的 宏的例子:#define 宏名 宏体 #define PI 3.1415926 转载自: http://zhidao.baidu.com/link?url=Damb48copKtKBsDeugBDIPT7bkNzOEYWDRZVfEfRCErJAul_mkvu9BX9QTlYDeBDhbs9BkQqebA9xsCN0eaoa_

C语言中,头文件和源文件的关系(转)

简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件) 编译器在编译时是以C文件为单位进行的,也就是

C语言中volatilekeyword的作用

一.前言 1.编译器优化介绍: 由于内存訪问速度远不及CPU处理速度,为提高机器总体性能,在硬件上引入硬件快速缓存Cache,加速对内存的訪问.另外在现代CPU中指令的运行并不一定严格依照顺序运行,没有相关性的指令能够乱序运行,以充分利用CPU的指令流水线,提高运行速度.以上是硬件级别的优化.再看软件一级的优化:一种是在编写代码时由程序猿优化,还有一种是由编译器进行优化.编译器优化经常使用的方法有:将内存变量缓存到寄存器:调整指令顺序充分利用CPU指令流水线,常见的是又一次排序读写指令.对常规内

C语言中的nan和inf使用

本文总结nan和inf在C语言当中的含义.产生和判定方法. C语言当中的nan 表示not a number,等同于 #IND:indeterminate (windows) 产生: 对浮点数进行了未定义的操作: 对负数开方,对负数求对数,0.0/0.0,0.0*inf.inf/inf.inf-inf这些操作都会得到nan.(0/0会产生操作异常:0.0/0.0不会产生操作异常,而是会得到nan): 在GNU中,使用宏:float NAN对浮点数赋值: 判定: 库函数方法:(推荐) <见后>

C语言中的system函数参数详解

http://blog.csdn.net/pipisorry/article/details/33024727 函数名: system 功   能: 发出一个DOS命令 用   法: int system(char *command); system函数已经被收录在标准c库中,可以直接调用 system()函数用于向操作系统传递控制台命令行,以WINDOWS系统为例,通过system()函数执行命令和在DOS窗口中执行命令的效果是一样的,所以只要在运行窗口中可以使用的命令都可以用SYSTEM()

C语言中sizeof与strlen区别

C语言中sizeof 与strlen 区别 一.本质区别 sizeof 和strlen 有本质上的区别.sizeof 是C 语言的一种单目运算符,如++.--等,并不是函数,sizeof 的优先级为2 级,比/.% 等3 级运算符优先级高,sizeof 以字节的形式给出操作数的存储空间的大小.而 strlen 是一个函数,是由 C 语言 的标准库提供的.strlen 计算的  是字符串的长度. 二.使用区别 1.sizeof sizeof 的操作数可以是数据类型.函数.变量,表达式使用方式为:

c语言中 int *p = NULL 和 *p = NULL 有什么区别

c语言中 int *p = NULL 和 *p = NULL 有什么区别 1. int *p = NULL; 代表定义一个指向整型变量的指针p,然后p的值设为NULL,也就是设为0:用另一种方式说,就是对一个刚定义的指向整型变量的指针,赋初始值,让其指向0地址. 2. *p = NULL; 代表对一个由指针p指向的变量(什么类型,不知道),赋值为0,是将那个变量赋值为0. 我们可以先看下面的代码: 1 int *p = NULL; 这时候我们可以通过编译器查看p的值为0x00000000. 这句

浅析C语言中assert的用法(转)

原文地址:http://www.jb51.net/article/39685.htm 以下是对C语言中assert的使用方法进行了介绍,需要的朋友可以参考下. assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression );assert的作用是先计算表达式expression,如果其值为假(即为0),那么它先向标准错误流stderr打印一条出错