![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 72
rednaxelafx
这个作者很懒,什么都没留下…
展开
-
sizeof运算符与副作用
有意思,我一直没注意到这点。在读LCC的第二章时,一开始就遇到了这么两个宏:alloc.c[code="c"]#define NEW(p,a) ((p) = allocate(sizeof *(p), (a)))#define NEW0(p,a) memset(NEW((p),(a)), 0, sizeof *(p))[/code]书上特别说明了:[quote]注意,NEW...原创 2008-08-08 16:10:42 · 362 阅读 · 0 评论 -
又一面试题,又一伪命题 - 关于C中字符数组逆序的方法
最近土豆同学经常去参加各种面试和笔试,而我也获益不少,得以见识到这些"题目"的诡异.这次听到的,是一个关于C语言中字符串逆序的问题.问题的核心是: 用什么办法,可以最高效的把一个char[]内容的顺序逆转? 最好是不用额外的存储空间.我陷入了沉思.土豆同学问我的时候,一再强调既不需要用"额外的存储空间,也不需要加减或者异或运算";跟算法没关系,而是与类似语言特性的特性相关.想想也是,要逆序...2007-10-21 19:46:21 · 135 阅读 · 0 评论 -
struct bit-field与little-endian
Endianess是个比较tricky的问题,特别是当数据在不同类型间转换时。先看看在一台32位的little-endian机器上,以下代码的行为:[code="c"]#include // memcpy#include // printftypedef struct { char a; char b; char c; char ...2008-10-25 05:00:23 · 136 阅读 · 0 评论 -
运行时对代码操纵的一个小demo
昨晚跟NS老兄聊的时候,聊到运行时生成代码的问题。单就“[i]在运行的时候制造出一块数据,让它被执行[/i]”而言,完全没难度可言——其实就是申请一块内存空间,往那里写入一些代表指令的数据,然后调用那块代码就行了。如果要生成的代码是固定的,或者是很有规律的(只是类似填空那样的),那很好办~一般觉得动态生成代码难那主要是说按需要动态从某种形式的源代码生成出对应的可执行代码有难度。或者说编译器的后...原创 2009-07-18 23:00:12 · 80 阅读 · 0 评论 -
运行时对代码操纵的一个小demo(二)
[url=http://rednaxelafx.iteye.com/blog/428721]前一篇[/url]演示了在堆上分配空间,生成出可执行代码,并执行之。一般来说可执行代码都是在代码段里的,在堆上和在数据段里都的不是“正常编译”得到的代码。这次就来演示一下把代码放到数据段的例子吧~代码如下。跟前一篇一样,把对应的机器码和汇编都写在注释里,方便理解。[code="c"]#inclu...原创 2009-07-19 10:06:07 · 77 阅读 · 0 评论 -
对C语义的for循环的基本代码生成模式
之前有同学在做龙书(第二版)题目,做到8.4的练习,跟我对答案,然后聊起C语言的for循环的代码生成有几种常见的模式。顺道跟大家分享讨论一下。C语言的for循环大家应该都很熟悉了,C系语言大都有一样或几乎一样的语法结构:一个循环初始化,一个循环条件,一个循环再初始化,然后一个循环体。通常循环初始化在最前面,再初始化的逻辑直接黏在循环体后面,能有变化的就是循环条件的代码生成到什么位置。...原创 2013-10-19 23:12:03 · 233 阅读 · 0 评论