c语言
bruce0532
这个作者很懒,什么都没留下…
展开
-
makefile 的ifeq和ifdef的区别
makefile详解 条件判断 二十使用条件判断 —————— 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。 一、示例 下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。 libs_for_gcc = -lgnu nor转载 2012-06-19 17:17:02 · 87415 阅读 · 0 评论 -
理解typedef
<br />人学C++也有三年了,还是对typedef不太熟,今天终于弄清楚了,所以发表此帖,希望对不太清楚的朋友能有所帮助。首先请看看下面这两句: typedef int a[10]; typedef void (*p)(void); 如果你能一眼就看出它们的意思,那请不要再往下看了。如果你不太理解,或概念还有些模糊,请继续往下看吧。下面的东西我就直接把人家的东西粘上去吧。自己敲太慢了。呵呵。原文(摘录): typedef用来声明一个别名,typedef后面的语法,是一个声明。本来笔者以为这里不会产生什么转载 2010-12-08 14:56:00 · 598 阅读 · 0 评论 -
浅谈函数的内聚性
<br />在设计类的时候,抽象和封装已经很大程度上取代了内聚性。但是在子程序这一层次上,内聚性仍是常用的启发式方法。下面内容,来自《代码大全》<br /><br /><br />对与子程序而言,内聚性是指子程序中各个操作之间的联系的紧密程度。<br />我们的目标是让子程序只把一件事情做好,不再做任何其他事情。<br />内聚性是针对操作的概念。即操作具有内聚性。通常,一个操作指一个语句,或一个函数调用。一个是简单的操作,一个是复杂的操作。<br />内聚性的一些概念,理解概念有助于思转载 2010-06-13 12:02:00 · 768 阅读 · 0 评论 -
一个工作3~4年程序员的年度学习计划
<br />今年是我工作的第四年,也是程序员成长的一个重要阶段。通过今年的学习,希望可以获得一个质的提高。要充分利用工作,工作间隙,晚上,周末的时间进行学习。<br />要同时关注广度和深度两个方面进行学习。<br />具体的点:<br />驱动开发,嵌入式开发:主要是和硬件结合比较紧密的领域,现在这是我广度上的一个盲区。这个完成后,基本上在近几年内,广度上应该达到目标了。后面就是要在深度上进行钻研了。充分利用公司这次的接入设备开发机会学习。今年主要是基本原理。<br />操作系统,操作系统内核:L转载 2010-06-13 11:05:00 · 975 阅读 · 0 评论 -
qsort用法
<br />c语言中有一个快速排序的函数 qsort<br />下面是一些使用时的注意情况。(转)<br /> <br />很多人问这个东西.我以前也看了好久,今天翻到以前学快排的时候写的练习code,基本上<br />能覆盖绝大部分用法了.<br /><br />里面有很多地方没判断相等的情况,按道理来说相等情况下应该返回0的,这个请看代码的<br />时候注意.我尽量保证代码不出错了.<br /><br />下面的这些说明和问题都是个人原创,没查什么资料,所以不保证其完全正确性,在此表示转载 2010-06-09 17:35:00 · 2135 阅读 · 0 评论 -
printf的注意事项
#include <stdio.h><br />#include <math.h><br />int main ()<br />{<br /> printf("%d/n", pow( 2, 15) );<br /> getchar();<br /> return 0;<br /> <br />}其输出结果为0,printf("%f/n", pow(2, 15) ); 这个输出32768.000000 因转载 2010-06-09 16:42:00 · 826 阅读 · 0 评论 -
变量的存储域
1.1 变量存储域1.1.1 一个示例<br />pang123hui首先提供了一个网上流传的学习代码示例: <br />int a = 0; //全局区 <br />void main() <br />{ <br />int b; //栈 <br />char s[] = “abc”; //s在栈,abc在文字常量区 <br />char *p1,*p2; //栈 <br />char *p3 = "123456"; //123456在常量区,p3在栈上 <br转载 2010-06-09 15:53:00 · 644 阅读 · 0 评论 -
函数指针和函数数组
<br />函数指针是指向函数的指针变量。<br /> 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针的说明方法为: <br /> 数据类型标志符 (*指针转载 2010-06-09 14:14:00 · 473 阅读 · 0 评论 -
ARM中的RO、RW和ZI DATA
<br />一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助。<br />要了解RO,RW和ZI需要首先了解以下知识:<br />ARM程序的组成<br />此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一转载 2010-06-09 14:20:00 · 434 阅读 · 0 评论 -
read/write和fread/fwrite有什么区别
<br />Q:<br />read/write 和 fread/fwrite 有什么区别 <br />实现机制是什么,两者有什么联系 <br />对文件读写,两者那个效率更高,速度更快 <br />A:<br />举个例子: <br />如果文件的大小是8k。 <br />你如果用read/write,且只分配了2k的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出。 <br />如果你用fread/fwrite,则系统自动分配缓存,则读出此文件只要一次系统调用从磁盘上读出转载 2010-07-29 22:31:00 · 902 阅读 · 0 评论 -
fflush详解
<br />1、为什么 fflush(stdin) 是错的<br />首先请看以下程序:<br />#include <stdio.h><br />int main( void )<br />{<br /> int i;<br /> for (;;) <br /> {<br /> fputs("Please input an integer: ", stdout);<br /> scanf("%d", &i);<br /> printf("%d/n", i);<转载 2011-05-11 16:25:00 · 872 阅读 · 0 评论 -
source insight研究——正则表达式篇 收藏
正则表达式主要用来做搜索和替换,一般强大一点的编辑器都会支持。si在搜索和替换界面里都有Use Regular Expression这样的选项。个人认为使用正则表达式(后简称RE)应该是每个程序员都应该掌握的技能。虽然和vim这些相比si对RE的支持还是弱一点,但对于从未了解过RE的人来说,从si这样的编辑器来入门RE也不失为一个好的选择。<br /><br />学习任何一项科学或技术,了解其涉及的各种概念是第一步,也是比较花时间的一步,我们需要先通读达原创 2011-04-18 17:24:00 · 3786 阅读 · 0 评论 -
do while(FLASE)的妙用【转】
<br />在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。<br /> 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。 <br />1. do...while(0)消除goto语句。<br />通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出原创 2011-04-25 13:22:00 · 1073 阅读 · 1 评论 -
C语言实现内存池 (转)
什么是内存池,这里简单介绍一下(不做详细说明),内存池技术是一种用于分配大量大小相同的小对象的技术,通过该技术可以极大加快内存分配/释放过程。其原理是先申请一大块内存,然后分成若干个大小相等的小块,用链表的方式将这些小块链在一起,当开发人员需要使用内存时(分配),从链表头取下一块返回给开发人员使用;当开发人员使用完毕后(释放),再将这块内存重新挂回链表尾。这样操作的好处有如下三点:1、提高分配和释转载 2012-05-25 18:40:55 · 1132 阅读 · 0 评论 -
sizeof的偏见
一直以为sizeof后面只能跟类型名,而今天的约瑟夫代码让我明白了sizeof的强大功能。先把链表实现的约瑟夫问题的解法的代码实现列出来:#include #include typedef struct node* link;struct node{int item; link next;};int main(int argc, char * argc[]){原创 2012-03-06 17:09:42 · 588 阅读 · 0 评论 -
标准输入、标准输出究竟是什么? .
本文将从基本原理解析标准输入,标准输出的由来(最终结论见最后).对于一个运行的程序,不可避免地要进行某些输入输出操作,也即I/O操作.对于I/O操 作,C语言提供了一系列标准I/O函数,来完成输入输出任务.最主要的标准I/O函数包括:fopen()(打开一个文件),fprintf()(写文件),fscanf()(读文 件).读写一个文件的步骤为:打开文件,同时得到指向文件的指针,然转载 2012-02-18 12:44:40 · 11039 阅读 · 1 评论 -
编程目标:开发人员如何提高能力
一个优秀的程序员如何能练就成一个卓越的程序员? 先等等,暂时不谈卓越,先谈谈如何成为一个优秀的程序员。 从第一步到第N步并没有明确的路线图。事实上,第N步到底是什么还不确定。就像逻辑型思维的开发者一样,缺乏明确的目标会让从入门到精通的道路变得异常崎岖。转载 2011-09-16 20:48:26 · 579 阅读 · 0 评论 -
每个程序员都必须遵守的编程原则
好的编程原则跟好的系统设计原则和技术实施原则有着密切的联系。下面的这些编程原则在过去的这些年里让我成为了一名优秀的程序员,我相信,这些原则对任何一个开发人员来说,都能让他的编程能力大幅度的提高,能让他开发出可维护性更强、缺陷更少的程序。 我不要自我重复 — 这也许是在编转载 2011-08-18 20:37:57 · 540 阅读 · 0 评论 -
各种流行的编程风格
在过去的N年中,我遇到了很多使用囧然不同风格的开发者,下面是我所知道的一些,你还知道其它的吗? 0. 散弹枪编程 这种编程风格是一种开发者使用非常随意的方式对待代码。“嗯,这个方法调用出错了……那么我会试着把传出的参数从 false 变成true!”,当然原创 2011-08-18 20:36:20 · 649 阅读 · 0 评论 -
mtk中的一些函数作用
一、进入 ILDE 界面 1.EntryIdleScreen() 2.mmi_idle_entry_idle_screen() 注册按键:HandleIdleScreenDigitEntry() IdleSetLRKey()注册左软件EntryMa转载 2011-07-11 17:09:22 · 1116 阅读 · 0 评论 -
extern 的用法
引言<br />在用C++的项目源码中,经常会不可避免的会看到下面的代码:1#ifdef __cplusplus 2extern"C"{ 3#endif 45/*...*/67#ifdef __cplusplus 8} 9#endif<br />它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从以下几个方面来介绍它:1、#ifdef _cplusplus/#endif _cplusplus及发散2、extern "C" 2.1、extern关键字2.2、"C"2.原创 2011-04-25 13:48:00 · 846 阅读 · 0 评论 -
c默认是传值的
在c中,参数默认是传值的,即在参数入栈时被复制一份。在函数里面修改这些参数,不会影响外面的调用者。例如#include #include #include void get_str(char * p){ p = (char *)malloc(sizeof("abcd")); strcpy(p , "abcd"); return ;}原创 2010-05-09 22:57:00 · 689 阅读 · 0 评论 -
switch中的返回
switch中的case中如果有深层的if语句,如果想退出swich语句,则用break,不管它是在多么深层的if语句中,都会退出当前case。如果想直接退出函数,则直接用return。例子如下:#include #include int main(void) { char *str1 = "Borland International", *str2 = "nat原创 2010-04-28 16:38:00 · 2106 阅读 · 0 评论 -
min宏定义探究(linux)
$ 编译成功!5、使用typeof和({})实现min,避免了副作用#define min(X,Y) /({ /typeof(X) __x=(X), __y=(Y); /(__x__y)?__x:__y; /})使用传统的min原创 2010-04-05 20:54:00 · 1666 阅读 · 0 评论 -
大小端
文章一: 端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian转载 2010-01-13 14:21:00 · 1532 阅读 · 0 评论 -
内存管理之内存池的设计
如何更好的管理在应用程序中内存的使用,同时提高内存使用的效率,这是值得每一个做开发的人深思的问题。内存池(Memory pool)提供了一种比较可行的解决方案。下面就一般内存池的原理与设计进行探讨。 一般的内存池的使用,分为以下几个过程: 1.创建内存池。这个过程的主要任务是预先分配足够大的内存,形成一个初步的“内存池”。这里在实现的过程中,具体可以这么做,因为应用程序中不同的地方需要的转载 2009-11-02 16:14:00 · 781 阅读 · 0 评论 -
__align(num) 分析
这几天用2440读写SD卡(FAT32文件系统),定义了个文件信息的数据结构里边数据类型有unsigned char, unsigned int, unsigned long几种,在从SD卡上读取数据的时候,直接将结构体对象的引用传入读取数据的函数时,发现结构体的数据并不是按照想象的一样。分析原因是32为嵌入式字节对齐出了问题。现将相关的资料总结一下: 首先,声明几个概念:(1)、转载 2009-10-23 16:55:00 · 18300 阅读 · 2 评论 -
头文件和源文件的关系
一、源文件如何根据#include来关联头文件1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。 #include 2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。 #include “xxx.h”转载 2009-10-23 18:02:00 · 1964 阅读 · 0 评论 -
sprintf函数的使用
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, ar转载 2009-10-23 10:26:00 · 921 阅读 · 0 评论 -
C语言中几#if,#if defined ,#ifdef,extern的用法描述
1、#if 和#ifdef当asd_eee表达式存在而且,值为ture的时候接续向下执行例如#define TARGET_LITTLE_ENDINA 1#define TARGET_BIG_ENDINA 0#ifdef TARGET_LITTLE_ENDINAcall little endina function#elsecall big endina function#endif转载 2009-10-21 18:05:00 · 1721 阅读 · 0 评论 -
c语言的32个关键字
第一个关键字:auto 用来声明自动变量。 可以显式的声明变量为自动变量。只要不是声明在所有函数之前的变量,即使没加auto关键字,也默认为自动变量。并且只在声明它的函数内有效。而且当使用完毕后,它的值会自动还原为最初所赋的值。自动变量使用时要先赋值,因为其中包含的是未知的值。例:auto int name=1;第二个关键字:static用来声明静态变量。可以显式的声明变量为静态变量原创 2009-10-21 11:59:00 · 919 阅读 · 0 评论 -
Tree命令
[Tree命令作用] 以图形显示驱动器或路径的文件夹结构。很多时候,这是一个非常有用的命令! [Tree命令格式] 可以在命令行窗口敲tree /?看帮助。 TREE [drive:][path] [/F] [/A] /F 显示每个文件夹中文件的名称。 /A 使用 ASCII 字符,而不使用扩展字符。 使用/F参数时显示所有目录及目录下的所有文件,省略转载 2009-10-20 18:50:00 · 1355 阅读 · 0 评论 -
C语言内存管理内幕(二)
引用计数引用计数是一种 半自动(semi-automated)的内存管理技术,这表示它需要一些编程支持,但是它不需要您确切知道某一对象何时不再被使用。引用计数机制为您完成内存管理任务。在引用计数中,所有共享的数据结构都有一个域来包含当前活动“引用”结构的次数。当向一个程序传递一个指向某个数据结构指针时,该程序会将引用计数增加 1。实质上,您是在告诉数据结构,它正在被存储在多少个位置上。转载 2009-10-19 14:21:00 · 750 阅读 · 0 评论 -
域名服务器
Domain name server DNS的全称是Domain Name Server,一种程序,它保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到转载 2009-11-26 10:36:00 · 782 阅读 · 0 评论 -
彻底搞定C指针-函数名与函数指针
函数名与函数指针 函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun(转载 2009-11-27 09:40:00 · 655 阅读 · 0 评论 -
sizeof和strlen
先看看sizeof() 一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。其实可以简单的理解sizeof是征对"类型"的。 二、sizeof的使用方法 1、用转载 2009-12-05 18:18:00 · 512 阅读 · 0 评论 -
系统程序员的成长
《系统程序员成长计划》的起源应该追溯到六年前了。04年我进入恒基伟业深圳研发部,参与商务通隐形手机开发。在此之前我是做服务器软件开发的,对嵌入式软件开发非常好奇,所以想方设法进入这个行业。恒基伟业在嵌入式方面的实力也是相当高的,很多在消费类设备方面的开发高手都有在恒基伟业工作过的经验。原以为做嵌入式开发的程序员都是非常牛的人,动不动都是能写上上万行汇编语言。真正进入这个行业之后,才转载 2010-04-16 18:03:00 · 507 阅读 · 0 评论 -
结构体的偏移量
求一个结构体的变量的便宜位置#define STRUCT_OFFSET(struct_name, element) ((int)&((struct *)0)->element) 以此来记录原创 2010-03-31 18:09:00 · 673 阅读 · 0 评论 -
c语言的学习过程
字符串 学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字符串strlen()的值,是否和他占据的内存空间相同?你是否知道strcpy函数存在的潜在风险?如何避免?如果一个字符串没有字符串结束符,而调用str开头的库函数,会发生什么?Strcpy(),strcat(),strcmp(),strncpy(),转载 2010-03-17 17:51:00 · 3101 阅读 · 2 评论 -
代码的缺陷--警惕
1、mzt_server_attribute.mzt_server_father_ptr[0].mzt_server_father_open = (mzt_server_attribute.mzt_server_father_ptr[0].mzt_server_father_open == TRUE ? FALSE : TRUE);应该写成一下格式:mzt_server_attribute原创 2010-03-11 17:03:00 · 674 阅读 · 0 评论