C语言知识
王玉成的博客
这个作者很懒,什么都没留下…
展开
-
C语言的分层设计的一个小例子
自己花了一段时间写的一个小程序,主要是反映的是C语言的分层设计思想,只在最底层做一些代码更改,不用更改上层的东西。例子以patch形式提交。可以先建一个空目录,然后把patch直接打到空目录里即可。里面自带一个手写的Makefile以下是代码:commit f7b930e691afd02aeb8e5842d1806bcd7b500b10Author: Yucheng.Wang Date: Wed Jun 30 15:08:41 2010 +0800 The delamination o原创 2010-06-30 15:20:00 · 2070 阅读 · 4 评论 -
C语言的另类结构体赋值
这几天看Linux的内核源码,突然看到init_pid_ns这个结构体变量的赋值特别奇怪。struct pid_namespace init_pid_ns = { .kref = { .refcount = ATOMIC_INIT(2), }, .pidmap = { [ 0 ... PIDMAP_ENTRIES-1原创 2011-11-24 09:46:53 · 2998 阅读 · 10 评论 -
利用cmake管理工程
近期由于做一个项目,需要重写Makefile,开始打算用GUN的aotu tools,但是考虑到上手不易,而且用起来复杂,最后用了cmake替换。情况还不错。自己也顺便总结了cmake的一些常用方法及注意事项。我特意写了一个最小化的项目说明cmake的注意事项。1.源代码首先建立原创 2011-07-27 14:29:53 · 2859 阅读 · 0 评论 -
从一段代码看异或的用途
h今天看到了ELF hash算法的实现,里面有个异或操作#include unsigned int elfhash( char * str){ unsigned int hash = 0 ; unsigned int x = 0 ; while (原创 2011-07-18 19:31:52 · 1704 阅读 · 0 评论 -
C语言的谜题
<br />原文链接:http://software.intel.com/zh-cn/blogs/2010/09/09/c-5/?cid=sw:prccsdn1307<br /> <br /> 作者: haoel (1 篇文章) 日期: 九月 9, 2010 在 6:03 下午 <br />这几天,本站推出了几篇关于C语言的文章如下所示:<br />语言的歧义 [酷壳链接] [CSDN链接]<br />谁说C语言很简单? [酷壳链接] [CSDN链接]<br />6个变态的C语言H转载 2010-10-15 15:43:00 · 860 阅读 · 0 评论 -
[转载]GCC的__attribute__扩展功能
摘要:在学习linux内核代码及一些开源软件的源码,经常可以看到有关__attribute__的相关使用。本文结合自己的学习经历,较为详细的介绍了__attribute__相关语法及其使用。----------------------------------------------------------------声明:此文为原创,欢迎转载,转载请保留如下信息作者:聂飞(afreez) 北京-中关村联系方式:afreez@sina.com (欢迎与作者交流)初次发布时间:2006-06-17不经本人同意,原创 2010-09-02 10:47:00 · 709 阅读 · 0 评论 -
[调试]学会用core dump调试程序错误
原文链接:http://www.blogjava.net/tinysun/archive/2010/07/29/327453.html 学会用core dump调试程序错误 ,一直不知道用core dump工具来调试程序,花了近一周的时间,才定位问题,老大很生气,后果很严重,呵呵,事后仔细学习了这块的知识,了解一点core dump的知识。 在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明者为王安),线圈就叫作core ,用线圈做的内存就叫作“core memory”。原创 2010-08-27 15:50:00 · 1630 阅读 · 0 评论 -
[转载]用dumper打开运行程序的core dump功能
原文链接:http://blog.chinaunix.net/u3/116920/showart_2285785.html用dumper打开运行程序的core dump功能 应用程序在异常发生的时候产生的内存转储文件,即core文件,对于应用程序开发人员调试有随机或者是很难重现的bug的应用程序有重要的意义。无奈,当 前很多的Linux发行版为了防止core文件占用过多的磁盘空间,或者说是污染系统,core dump功能默认都是关闭的,你可以通过ulimit -c查看你正在使用的发行原创 2010-08-27 15:33:00 · 1302 阅读 · 0 评论 -
[精华] GDB基本用法
链接:http://www.chinaunix.net/jh/23/24098.html相关网站 http://www.jimmy-lam.com/studyarea/goldencat/debug.htm http://phi.sinica.edu.tw/~tyuan/pcfarm.old/manuals/gnu/gdb_basic.html GDB的使用 当程序出错并产生core 时 快速定位出错函数的办法 gdb 程序名 core文件名(一般是core,也可能是core.xxx转载 2010-06-25 11:20:00 · 807 阅读 · 0 评论 -
[转载]C语言宏定义技巧
文章整理: www.diybl.com 文章来源: 网络语言宏定义技巧(常用宏定义) 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef unsigned char原创 2010-07-22 10:58:00 · 816 阅读 · 0 评论 -
[转载]Segmentation fault in Linux
1.原文链接:http://www.cnblogs.com/kaixin/archive/2010/06/07/1753133.html 2.指针越界和SIGSEGV 经常看到有帖子把两者混淆,而这两者的关系也确实微妙。在此,我们把指针运算(加减)引起的越界、野指针、空指针都归为指针越界。SIGSEGV在很多时候是由于指针越界引起的,但并不是所有的指针越界都会引发SIGSEGV。一个越界的指针,如果不解引用它,是不会引起SIGSEGV的。而即使解引用了一个越界的指针,也不一定会引起SIGSEGV。这听转载 2010-07-12 11:28:00 · 1873 阅读 · 3 评论 -
[转载]linux内存泄露,不再困难!Valgrind工具-击破内存泄露!
原文地址:http://www.yqshare.com/valgrind-tools-in-linux.htmlLinux下用Valgrind防止内存泄露 用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一款工具。Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86,amd64和ppc32架构上。valgrind包含一原创 2010-07-11 18:04:00 · 908 阅读 · 0 评论 -
[转载]一个指针参数引发的血案
原文链接:http://blog.odichy.org/tag/malloc今天在阅览室看《算法导论》,顺便用C写了链表相关的算法,结果在初始化链表的时候出现了问题,出现了Segmentation fault。先来看看错误的代码,省略一些定义了: 12345678910111213int main(void){ list *li; init(li); insert(li, 5); //main函数以下省略,insert为插入一个元素到链表} static原创 2010-07-11 16:24:00 · 909 阅读 · 0 评论 -
[转载]Linux下“段错误”--segmentation fault[]
原文链接:http://hi.baidu.com/xun1573/blog/item/4fdaa813ae4f972bdd5401f4.html 小型的嵌入式应用中经常会出现许多内存问题,很多情况下难以定位问题出现在哪里。 我在 sourceforge 上找了些检测 C 内存泄漏的工具,感觉比较易用的是 memleak,下面就来简要介绍一下它的使用。 下载得到的 memleak 压缩包大小不到原创 2010-07-12 12:01:00 · 1135 阅读 · 0 评论 -
野指针引发的段错误(附解决方法)
写了一个静态链表的程序,但是在不同的调用中,出现的结果完全不一样。编译器是,操作系统是Ubuntu9.04,CPU是AMD4400,但是装的是32位的操作系统。$ gcc --versiongcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3Copyright (C) 2008 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarra原创 2010-07-11 14:11:00 · 2180 阅读 · 0 评论 -
模块化编程的分层设计经验
模块化编程的分层设计经验 操作要点:1、每一层直接对下一层操作,尽量避免交叉调用或越级调用2、某些器件会把硬件驱动层合并成一个文件时,则归于较高的层3、相同功能的外部函数尽量一致,尽量保证通用性4、对于初次编程的模块,要严格保证中间各层的正确性 好处:1、对于后期维护扩展,只需修改应用层和物理层,根据需要扩展功能层2、一个新项目只需把要用到的文件加入工程,简单修改调试就出来了3、随着模块的不断积累,新的项目将越来越容易完成,后期的维护扩展也变得非常简单了4、对于C语言编程,只需简单修改物理层就可完成不同原创 2010-06-30 09:10:00 · 1182 阅读 · 0 评论 -
C程序的内存分布 &程序运行时,在内存中的分布
原文地址:http://hi.baidu.com/adokaixin/blog/item/21c3b019d859e976dab4bd85.html C程序一般分为 1.程序段:程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本. 2.初始化过的数据:在程序运行值初已经对变量进行初始化的 3.未初始化过的数据:在程序运行初未对变量进行初始化的数据 4.堆(stack):存储局部,临时变量,在程序块开始时自动分配内存,结束时自动释放内存.存储函数的返回指针. 5.栈(heap):存储动态内存分配,转载 2010-06-29 16:22:00 · 1057 阅读 · 0 评论 -
sizeof 解析
原地址:http://blog.sina.com.cn/s/blog_624ca8080100fxuo.htmlsizeof不是函数,而是一种单目操作符,在编译时求值的,而且这个值在程序中被当作一个常量来处理。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 网上查了半天也没有人知道C库中是如何实现的,下面是使用宏实现的: // type为基本类型,var 为变量 #define sizeof_v(var) ( /转载 2010-06-29 12:20:00 · 1104 阅读 · 0 评论 -
linux的用户态程序栈的跟踪方法
linux的用户态程序栈的跟踪方法GNU C中的libc相关函数介绍实例分析GNU C中的libc相关函数介绍这一部分文章来源于GNU C的在线帮助文档实例分析将下面的代码保存为main.c文件,然后用gcc编译#include <execinfo.h>#include <stdio.h>#include <stdlib.h>/* Obtain a backtrace and print原创 2016-06-16 16:31:23 · 3148 阅读 · 0 评论