编写易于理解的代码
编写易于理解的代码提示 1:经常注释请经常为代码添加注释。假设您编写了一个过程,但没有为它做注释,几个月后,您再回过头来想对它进行一些修整(您绝对会这么做),将需要花费很多时间去研读这些代码,原因就是因为您之前没有做注释。而时间是您最为宝贵的资源。丢失的时间是永远也找不回来的。但注释和其他事情一样也是需要技巧的。只要多练习,在这方面的技能就会不断提高。注释有好有坏。最好不要将注释写得过长。假设为一个函数做了注释,而这个注释在将来可以节省您理解代码所需的时间,比如说 10 分钟。这很好。现在假设所编写的
c函数编写规范
一、可重入函数 1)什么是可重入性? 可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。 2)可重入函数: 不为连续的调用持有静态数据。 不返回指向静态数据的指针;所有数据都由函数的调用者提供。 使用本地数据,或者通过制作全局数
c++学习渐进数目
《 Inside the C++ Object Model》我自己现在也在看这本书,对C++对象模型介绍的非常好,是深入了解C++的资料书籍。C++学习应该从两个方面来学习,首先学习C++语言层面,也就是C++语法,如果深入学习的话就会进入C++底层。。。第二个层面就是对象,设计很广泛:对象设计,对象复用,STL,COM, BOOST。。。 1. 《The C++ Programming Language》 (Special 3rd Edition) by Bjarne StroustrupC++之父著作的大头作,非常不错,很厚,对C++介绍的非常详细。 2. 《The Design and Evolution of C++》 by Bjarne Stroustrup如果你只打算购买一
学习C++:实践者的方法
前言 我的blog以前很长一段时间关注的都是C++中的技术&细节,乃至于读者和应者都寥寥。然而5月份的时候写的一篇“你应当如何学习C++”,阅读量却达到了3万多,在blog上所有文章中却是最高的(且远远超过了第二位);评论数目也有一百多。为什么独独这篇能够激起这么多的回应,想必是国内的C++社群被C++压抑太久,或者,严格来说,是被C++的教育方式压抑太久。实际上,不管是在各大国内论坛上,还是在comp.lang.c++.moderated这样的国际C++论坛上,乃至于在douban上的小组内,有心者都会发现,对C++语言的细节的关注一直都没有停止过,
快速掌握一个语言最常用的50%
现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了自己原本是要解决问题来的。第一种路子也有问题,在对于这种语言的脾气秉性还没有了解的情况下大刀阔斧地拼凑代码
C++经典书籍解读
C++是一门广泛用于工业软件研发的大型语言。它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值。和C语言一样,C++已经在许多重要的领域大获成功。 然而,一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,而在高阶程序设计领域,Java和C#正在不断蚕食着C+ +的地盘。也许C++与C合为一体永远都是一个梦想,也许Java和C#的狂潮终将迫使C++回归本位 — 回到它有着根本性优势的开发领域:低级系统程序设计、高级大规模高性能应用设计、嵌入式程序设计以及数值科学计算等。果真
嵌入式CGI开发之旅——3
对于CGI来说,处理表单是它的重头戏,今天我们来看看CGI如何处理HTML的表单。处理表单(GET)现在大多数的CGI脚本用来处理表单输入,处理表单的过程和上面直接在URL中调用CGI脚本的情况有些不同。一个表单通常分为两个部分:HTML表单格式和处理数据的脚本,处理程序由标签的ACTION属性指定,每个输入区都有一个NAME属性用来称呼表单元素,当表单数据被递交给ACTION中定义的处理程序时,NAME和其输入内容被以数字或字符的形式保存在环境变量中,脚本程序再通过读取环境变量的方式获得用户输入,根据编程语言的不同获取环境变量的方式也不同
嵌入式CGI开发之旅——2
第一个CGI程序:Hello WorldHello World!任何程序语言的学习都是从打印Hello World!开始的,这样不但可以熟悉程序的流程和大体结构,而且最大限度的避免了一些细小的错误,给初学者信心。hello.c#include <stdio.h>int main(){ printf("Content-Type:text/plain;charset=us-asciinn"); printf("Hello Worldnn"); return 0;}#gcc –o hello.cgi hello.c#cp hello.cgi /var/www/cgi-bin/用GCC将源文件编译成CGI程序,并拷贝到服务器所制定的cgi程序运行目录中。在浏览器中输入:192.168.4
C语言-内存管理之二[内存指令]
C语言-内存管理之二[内存指令]http://blog.chinaunix.net/u3/99677/showart.php?id=2005205内存指令malloc 原型:extern void *malloc(unsigned int num_bytes);头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的。) 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用free()函数将内存块释放。 举例: /*malloc.c*/ #include <syslib.h> #include <
C语言-内存管理之三[理解static关键字]
C语言-内存管理之三[理解static关键字]理解static关键字1.3理解static关键字C/C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 1.3.1面向过程设计中的static1.3.1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; f
C语言-内存管理之一[内存分配]
C语言-内存管理之一[内存分配]http://blog.chinaunix.net/u3/99677/showart.php?id=2005197内存分配1.1 内存分配1.1.1内存分配方式内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量等。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序在运
读我们的学科——计算机专业学习浅谈
作者:林健一、广泛了解,从科普书籍开始 选择计算机专业的同学,也许是因为原先有一定的基础,也许是因为一时的激情,但更多的人,可能对自己的选择没有深刻的认识,或多或少对计算机专业有一些神秘的感觉。自己究竟是否喜欢这个学科?才华能够在哪个分支领域有所施展?抑或是真的不适合这个专业?诸多疑问,解决的方法首先便是了解和认识我们的学科。浓厚的兴趣是学好任何学科的源泉;而广泛的了解则是获得兴趣的途径。当今我们对于信息的获取已非难事,其中“阅读”是一个简洁而有效的方法。 也许你认为阅读专业书籍对于刚刚步入
Linux时区设置及NTP时间同步
Linux时区设置及NTP时间同步文章搜集自:http://publishblog.blogchina.com/blog/tb.b?diaryID=2745968 一、背景机器装的是busybox,使用的是最小集合的linux。硬件时钟是本地时间,而内核时钟是UTC时间,没有设置时区,也没有任何时区设置的选项。二、需求 这台机器需要定时进行NTP时间同步。同步之后显示给用户的是本地时间。三、过程 1.时区的支持(1)hwclock为了查看硬件时钟是否为本地时间,运行命令hwclock –r。结果系统提示:“Could not open RTC: No such file or directory”,即找不到RTC文件。(2)/dev/rtc 由于内
ntp协议及客户端开发
ntp协议及客户端开发说明:参考资料:ntp资料:http://ntp.buptnet.edu.cn/ntp_chinese/lesson/lesson.htm 开源代码:http://doolittle.icarus.com/ntpclient/代码下载:linux平台代码:http://pickup.mofile.com/7867848658129149windows平台代码:http://pickup.mofile.com/0760743850823000一、ntp介绍: Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介
I2S音频总线
I2S总线概述音响数据的采集、处理和传输是多媒体技术的重要组成部分。众多的数字音频系统已经进入消费市场,例如数字音频录音带、数字声音处理器。对于设备和生产厂家来说,标准化的信息传输结构可以提高系统的适应性。I2S(Inter—IC Sound)总线是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。I2S
快速入门 TI 的 Codec Engine
帮您快速入门 TI 的 Codec Engine德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 崔晶德州仪器(TI)的第一颗达芬奇(DaVinci)芯片(处理器)DM6446已经问世快三年了。继DM644x之后,TI又陆续推出了DM643x,DM35x,DM6467,OMAP353x等一系列ARM+DSP或ARM+视频协处理器的多媒体处理器平台。很多有很强DSP开发经验或ARM开发经验的工程师都转到达芬奇或通用OMAP(OMAP353x)平台上开发视频监控、视频会议及便携式多媒体终端等产品。大家都面临着同一个问题,那就是如何实现ARM和DSP或协处理器的通信和协同工作?TI的数字视频
Linux音频编程指南
Linux音频编程指南肖文鹏 (xiaowp@263.net), 自由软件爱好者本文作者肖文鹏是一名自由软件爱好者,主要从事操作系统和分布式计算环境的研究,喜爱Linux和Python。你可以通过 xiaowp@263.net与他取得联系。 简介: 虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序,同时还给出了一些常用的音频编程框架。 -->一、数字音频音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然