C/C++
黑夜探索
孤灯帘影只剩下自己和影子在私语
展开
-
C语言的那些小秘密之——断言
每次写摘要我都觉得是一件很头疼的事儿,因为我知道摘要真的很重要,它几乎直接就决定了读者的数量。可能花了九六二虎之力写出来的东西,因为摘要的失败而前功尽弃,因为绝大多数的读者看文章之前都会浏览下摘要,如果他们发现摘要“不对口”,没有什么特色和吸引人的地方,那么轻则采用一目十行的方法看完全文,重则对文章判“死刑”,一篇文章的好坏虽然不能用摘要来衡量,但是它却常常被读者用来衡量一篇文章的好坏,从而成为了转载 2013-06-30 10:12:42 · 589 阅读 · 0 评论 -
库依赖错误导致main.c:(.text+0x7): undefined reference问题
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(转载 2014-10-09 18:40:24 · 7943 阅读 · 0 评论 -
如何学好C语言
有人在酷壳的留言版上询问下面的问题keep_walker :今天晚上我看到这篇文章。http://programmers.stackexchange.com/questions/62502/small-c-projects我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程转载 2014-08-14 10:43:12 · 626 阅读 · 0 评论 -
计算机中带符号的整数为何采用二进制的补码进行存储
我们都知道在计算机内部数据的存储和运算都采用二进制,是因为计算机是由很多晶体管组成的,而晶体管只有2种状态,恰好可以用二进制的0和1表示,并且采用二进制可以使得计算机内部的运算规则简单,稳定性高。在计算机中存在实数和整数,而整数又分为无符号整数和有符号整数,无符号的整数表示很简单,直接采用其二进制形式表示即可,而对于有符号数的表示却成了问题,如何表示正负?如何去处理正负号?下面来具体说转载 2013-11-17 23:43:24 · 2426 阅读 · 0 评论 -
关于位域的字节内存储顺序、字节对齐、字节序以及符号
位域,Bit-field,又称位段。位域操作是在位操作之外的另一种操作比特位的方法。 相对于按位操作而言,操作位域可以“像”操作普通的变量一样。所以在需要进行比特位 操作的场合,硬件控制、协议处理, 位域被广泛应用。位域可以定义在class、struct、 union中,作为他们的数据成员。 使用位域的好处,主要是不需要进 行与或非以及相关掩码的处理。但是,福兮祸转载 2013-11-17 22:49:07 · 1628 阅读 · 0 评论 -
位域使用注意
例:#include int main(void){ /*struct bs { unsigned a: 1; unsigned b: 3; unsigned c: 4; unsigned d: 24; unsigned e: 1; }bit, *pbit;*/原创 2013-09-24 17:42:21 · 1269 阅读 · 0 评论 -
snprintf高阶用法
int snprintf(char *str, size_t size, const char *format, ...); 函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值将可变个参数(...)按照format格式化成字符串,然后将其复制到str中,返回写入str中的字符串的长度,所以可以利用snprintf函数来提前获取需要的内存空间大小.按如下格式调用:int原创 2013-06-30 11:48:43 · 1322 阅读 · 0 评论 -
Linux C函数之内存配置函数 (2009-06-29 21:20)
1. 配置和释放内存alloca: 配置内存空间头文件: stdlib.h函数定义: void *alloc(size_t size);说明: alloca()用来配置size个字节的内存空间, 然而和malloc/calloc不同的是, alloca()是从堆栈空间(stack)中配置内存, 因此在函数返回时会自动释放此空间. 若成功返回指向配置内存首地址的指针, 失败返回NUL转载 2013-06-30 11:05:43 · 602 阅读 · 0 评论 -
C语言里的左移和右移运算
先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用int i = 1;i = i 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因转载 2013-06-30 10:36:09 · 795 阅读 · 0 评论 -
linux 下查看硬盘坏道代码(转)
对于硬盘的坏道的确没有什么好的办法,ata协议中的smart命令本意上是好的,但是很多的硬盘厂商并没有很好的实现smart的功能;硬盘的相关错误信息会存在相应的扇区里,但是这些扇区相当于一个环形的缓冲区,所以记录的错误信息有限,如果需要完整的硬盘坏道信息,smart就无能为力了。通过完整的读一遍硬盘可以找出坏道的完整信息,但是读牵涉到了DMA的数据传输过程所以效率较低;ata的协议里READ VE转载 2015-09-07 22:27:08 · 1557 阅读 · 0 评论