
C/C++
文章平均质量分 67
gohome520
这个作者很懒,什么都没留下…
展开
-
const用法
很久没用const了,有点忘了。。。const是左结合类型修饰符,它与左边的类型一起修饰右边的内容,比如int const *b,则int const限制右边的*b,但不限制b。因此,对b重新赋值不会有错误,但对*b进行重新赋值就不行(编译的时候)。下面是一个简单的例子,基本包含了const的基本情况:#include int main(int argc, char *原创 2011-09-18 10:49:45 · 809 阅读 · 0 评论 -
C语言_空结构体的大小
定义一个空的结构体,那么,这个结构体占多大空间呢?在C中,空结构的大小为0。在C++中,空结构的大小则为1。#include struct A{}aa;int main(int argc, char *argv[]){ printf("%d\n", sizeof(struct A)); printf("%d\n", sizeof原创 2012-02-13 12:24:03 · 5807 阅读 · 3 评论 -
switch
根据网上博文(见参考),亲自确认了一下GCC对switch的优化,这里留个笔记。1. 概述GCC会根据switch具体列举值的情况进行一些优化:* 当枚举的值较多且比较连续时,使用跳转表,O(1)。* 当枚举的值跨度很大时,不使用跳转表,但是,会针对枚举值进行二分跳转,O(lgn)。2. 使用跳转表的情况int switch_test(int x){原创 2011-11-15 10:49:11 · 1072 阅读 · 0 评论 -
C语言_大小端与union
大端(big_endian):字数据的高字节存储在低地址中,而字数据的低字节存储在高地址中。小端(little_endian):字数据的高字节存存储在高地址中,而字数据的低字节存储在低字节中。而对union型成员的存取都是相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取都是从union的首地址位置开始的。利用这个特性,我们可以判断当前系统是大端还是原创 2012-02-13 12:47:02 · 1604 阅读 · 0 评论 -
混乱代码大赛
国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)目的是写出最有创意的最让人难以理解的C语言代码。下面是其中一届的获奖代码,写得真是波浪叠起呀。#include #include #include #define PI 314#define Z if#define P a->b#define原创 2012-03-04 09:09:33 · 2676 阅读 · 0 评论 -
相同代码在GCC不同版本(3.4.4和4.5.3)的不同结果
代码 int n = 1; printf("%d, %d, %d, %d\n", n, n++, n++, n); GCC 4.5.3(运行结果:3, 2, 1, 3) movl $1, -12(%ebp) ==> -12(%ebp) = 1; movl -12(%ebp), %edx原创 2012-05-04 21:52:42 · 1129 阅读 · 0 评论 -
用宏控制代码的一个注意事项
有时候会用宏对代码进行控制,基本方式如下:#ifdef XXXX#else#endif但有一点需要注意:#endif必须单独占一行,若是在其后面写代码,则后面的代码在预处理的时候也会被删掉。例如下面的一段代码,在#endif同行还有一个if语句#include int main(){ int a, b;#ifdef ABC原创 2012-09-01 11:31:30 · 1195 阅读 · 0 评论