博文

C程序十大建议(2007-02-13 12:31:00)

摘要:神乎其技,惟C程序,功到自成,十大建议!     1、汝应频繁催动lint工具,据其语法声明修习内力,此事皆因lint之思虑决断实远在君上。    2、不可依随NULL指针,如若不然,混沌痴颠必俟君于彼岸。    3、纵有天赋大智慧,知晓其事无碍,汝亦当尽数强制挪移函数参数为原型所期之数据类型,以免一时疏忽,致使数据类型向汝讨还血债。    4、若头文件未于函数原型之中声明返回值类型,汝当亲为此事,更须谨慎再三,以防不测降临汝身。    5、汝须亲核字符串、数组操作之越界与否。古之圣人有言: 尝祈门人对答“然也”,不意门人答曰“吾了然于胸无须多虑尽请宽心他日趋庭必当重谢”——所期者短,所获者长,此于数组,实最险要处也。    6、若函数声明内提及,于异常时将返回错误代码云云,汝当谨慎校核该返回值。或有校核语句使汝之代码增大数倍,令汝之手指因敲键而痛楚莫名之事,汝亦当如此。不然,汝固以为此异常之事难得一见,上苍亦必借此惩戒汝之傲慢。    7、汝应研习库函数,不当亲笔重写之。如是,汝之代码必短小易读,汝之心境必清爽恬淡。    8、纵汝不愿,汝亦应借括号、缩进之属,使汝之代码间架清晰,可为后者借鉴。汝之大智慧施于决疑解难则可,施于敷设谜团、淆乱文体则万万不可。    9、外部标识符之前六字符当与众不同。此律法看似粗陋,和者寥寥,然其效用自能延续永远。汝若不从此言,他日,汝欲连接程序于旧作之上时,必抓耳挠腮、蓬头垢面,狼狈之相尽现矣。    10、或有族类,大言炎炎,云“普天之下,莫非VAX”。于此等异端,汝当摒弃之、断绝之、远避之。更有异人,笃信魔道,以为纵汝所用电脑频繁换代,汝之程序亦能长久适用。汝亦不可与此类恶人来往,谨记谨记。 
  如何编写最烂的C 语言程序    1、重写标准库函数,把函数名改成你自己才懂得的晦涩的名字。    2、使用晦涩的,个性化的,无法移植的函数库,这样你就永远也不会离开你喜欢的平台了。    3、在所有函数调用前,使用最能精确描述函数功能的注释,比如 printf("Hello world\n");&nbs......

阅读全文(1172) | 评论:0

C编译错误信息(2007-02-13 12:29:00)

摘要:说明:Turbo C 的源程序错误分为三种类型:致命错误、一般错误和警告。
其中,致命错误通常是内部编译出错;一般错误指程序的语法错误、磁盘或内存
存取错误或命令行错误等;警告则只是指出一些得怀疑的情况,它并不防止编译
的进行。

  下面按字母顺序A~Z分别列出致命错误及一般错误信息,英汉对照及处理方
法:

(一)、致命错误英汉对照及处理方法:

A-B致命错误

Bad call of in-line function (内部函数非法调用)
分析与处理:在使用一个宏定义的内部函数时,没能正确调用。一个内部函数以
两个下划线(__)开始和结束。

Irreducable expression tree (不可约表达式树)
分析与处理:这种错误指的是文件行中的表达式太复杂,使得代码生成程序无法
为它生成代码。这种表达式必须避免使用。

Register allocation failure (存储器分配失败)
分析与处理:这种错误指的是文件行中的表达式太复杂,代码生成程序无法为它
生成代码。此时应简化这种繁杂的表达式或干脆避免使用它。

(二)、一般错误信息英汉照及处理方法

#operator not followed by maco argument name(#运算符后没跟宏变元名)
分析与处理:在宏定义中,#用于标识一宏变串。“#”号后必须跟一个宏变元
名。

'xxxxxx' not anargument ('xxxxxx'不是函数参数)
分析与处理:在源程序中将该标识符定义为一个函数参数,但此标识符没有在函
数中出现。

Ambiguous symbol 'xxxxxx' (二义性符号'xxxxxx')
分析与处理:两个或多个结构的某一域名相同,但具有......

阅读全文(1735) | 评论:0

用VC++在状态栏显示时钟(2007-02-13 12:19:00)

摘要:在VC的控件中有个Status bar可以在窗体状态栏中添加日期和时间。其实通过简单的代码,你就能创建一个有时钟显示的状态栏,并且还能设置时钟栏的显示方式。举例如下:
  首先,用MFC AppWizard按默认方式创建一个单文档界面的应用程序框架。
  然后,编写代码:
  1)在String Table中添加New String,在此定义为ID_INDICATOR_CLOCK,将其Caption设为00:00:00(由于状态栏根据Caption确定时间窗格的缺省宽度,使用此值将为时间的显示预留空间)。注意,本步操作时有两种方式:
  一种建立新的String Table,并添加String;另一种则在原有String Table中添加。当用后一种方式操作时,若完成后,时钟栏并不显示时间,则需要将此New String在String Table中对应的Value值加1(可在resource.h中修改)。
  2)在MainFrm.cpp中indicators声明处添加ID_INDICATOR_CLOCK,代码如下:
  …
  static UINT indicators[] =
  {
  ID_SEPARATOR,  
  ID_INDICATOR_CLOCK,
  ID_INDICATOR_CAPS,
  ID_INDICATOR_NUM,
  ID_INDICATOR_SCRL,
  };
  …
  这一步中ID_INDICATOR_CLOCK的插入位置将影响时间窗格在状态栏中的显示位置。
  3)安装定时器:在MainFrm.cpp中OnCreate函数处添加代码如下:
  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  { ……
  SetTimer(1,1000,NULL);//安装定时器,并将其时间间隔设为1000毫秒
  return 0;
  }
  4)编写时间处理函数:利用ClassWizard为CMainFrame类加入WM_TIMER的消
  息处理函数OnTi......

阅读全文(1301) | 评论:0

你该学什么程序语言?(2007-02-13 12:18:00)

摘要:除非你像我一样学程序语言只是为了到处献宝,否则你在学一套程序语言前,应该先仔细
评估到底要学哪一套。每个程序语言的用途都有很大的差异,走了冤枉路可能会耽误到计
画实作的进程。

我大致上把程序语言分成五类,分述如下:

Web Page Script Languages
用来做网页的语言,可以对网页做控制。如果你希望设计出很炫的网页,光靠 HTML 是不
够的,你还得学一套 Web Page Script Language,比方说 JavaScript(ECMAScript)和
微软的 JScript。不过两者都是系出同门,所以差不多。WML Script(WAP 手机的 scrip
t)也是袭自 JavaScript。

许多人知道我不会 JavaScript 之后,都会大吃一惊地反问:「可是你不是会 Java,怎么
不顺便学 JavaScript,两个语言不是差不多」。如果依照此推理,我看我差不多每个语言
都要学了,因为除了 REBOL 和汇编语言比较特殊之外,我觉得其它语言的语法都差不多(
但用途差很多)。

不过我最近的确是有打算开始学 JavaScript,因为我发现用到它的机会还不少。除了网页
会用到之外,我最近所接触的 SVG(Scalable Vector Graphics)就使用 JavaScript 来
达到动画效果。

IntERPreted Languages(直译式语言)
这类直译式的语言包括了 Perl、Python、REBOL、Ruby... 等,也常被称为 script 语言
,通常是用来取代批次档和 shell script 以便和底下的操作系统沟通。基本上,每个人
至少都应该要会一套这类的语言,当你需要做某件简单的工作,你可以透过直译式的语言
来轻易地办到,这么一来,你就可以不必大张旗鼓地使用 Java 和 C++ 等工具了。

直译式的语言通常比较高阶,程序比较好写,往往简短地几行程序就抵得过 Java 或 C++
的一堆程序代码。因为不用编译而且高阶,所以这类语言的程序效率通常很差,又因为原
始程序代码暴露在外,所以拿它来写写工具程序自己用可以,但是拿来......

阅读全文(1530) | 评论:0

main参数小解(2007-02-13 12:17:00)

摘要: c/c++ 中的主函数名为main(),它可以有两个参数,如下 int main( int argc, char* argv[] ); main函数是程序的入口,一般情况下不会有其他函数调用它。我们要使用它只需要在命令行下键入这个程序的名称,同时可以在后面写上若干字符串用空格隔开,就像这样(假设你的程序编译连接后的可执行文件名称是cp): cp file1 file2 这样cp就会启动(不讨论操作系统之间的不同之处),cp后面的"file1 file2"就是main()的参数——这就是main参数的来源。 第一个参数是整数,它就是你在命令行下执行程序输入的被空格分隔的字符串的个数,比如上面的例子它的argc就是3——第一个cp也算;第二个参数是一个字符串数组,就是{"file1","file2"}。这就是main参数的含义 附一个小程序察看main参数 int main( int argc, char* argv[] ) {
    for ( int i = 0; i < argc; i++ ) {
        cout << "argv[" << i << "] = \"" << argv[i]<< "\"" << endl;
    }
    return 0;
}......

阅读全文(1682) | 评论:0

学C++的50条原则(2007-02-13 12:11:00)

摘要:1.把C++当成一门新的语言学习(和C没啥关系!真的。);

2.看《Thinking In C++》,不要看《C++变成死相》;

3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;

4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;

5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;

6.会用Visual C++,并不说明你会C++;

7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;

8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;

9.看Visual C++的书,是学不了C++语言的;

10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?

11.浮躁的人容易问:我到底该学什么;——别问,学就对了;

12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;

13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!

14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;

15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;

16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;

17.C++不仅仅是支持面向对象的程序设计语言;

18.学习编程最好的方法之一就是阅读源代码;

19.在任何时刻都不要认为自己手中的书已经足够了;

20.请阅读《The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;

21.看得懂的书,请仔细看;看不懂的书,请硬着......

阅读全文(1058) | 评论:0

一位老工程师的终告(2007-02-13 12:08:00)

摘要:一位老工程师的终告

诸位,咱当电子工程师也是十余年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强!   [1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手!    [2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!         [3]不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,美国日本,一律如此!   [4]多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!      [5]知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!       [6]抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直......

阅读全文(925) | 评论:0

VC6.0编译选项说明(2007-02-13 12:06:00)

摘要:VC6.0编译选项说明 点击数:92    发布日期:2006-12-14 14:22:00  
【收藏】 【评论】 【打印】 【编程爱好者论坛】 【关闭】

  此帖来自网络(仅供学习)   InitInstance   Compiler   Reference  
  Home   |     Overview   |     How   Do   I  
   
  CL.EXE   is   a   32-bit   tool   that   controls   the   Microsoft   C   and   C++   compilers   and   linker.   The   compilers   produce   Common   Object   File   Format   (COFF)   object   (.OBJ)   files.   The   linker   produces   executable   (.EXE)   files   or   dynamic-link   libraries   (DLLs).  
   
  For   information   on   specifying   options,   see   Set   Compiler   Options. ......

阅读全文(2561) | 评论:0

Windows编程基础 (2007-02-13 12:05:00)

摘要:简介

  本文目的是介绍Windows编程基础。在本文结束时,你应该能够很好的工作了,虽然可能是简单的WIindows程序。你需要有C语言的基础知识,我很少将C++的代码扩充到程序中。当然,由于Windows本身就是面向对象的,一点类的知识是不会对你有什么损害的。如果你不熟悉C++,没有关系,我想你还是能从我这里学到大部分的东西。所有的程序代码都通过了Microsoft Visual C++6.0的编译,如果你还没有合适的编译器,弄一个同我一样的好了,它还是很棒的。开动吧!

  开始

  多数的Windows程序都需要Windows.h和Windowsx.h这两个头文件,要确保使用它们。当然,你还需要其它的标准的C的头文件,象stdio.h,conio.h等。除了这些,你还会经常看到在程序的开始有这样一行代码:

#define WIN32_LEANAND_MEAN

  它表示Windows的头文件中将拒绝接受MFC的东西,这将加速你的build时间。如果你从没有打算应用MFC在你的游戏编程中,那就使用它吧。如果你以前从没有看过这种声明类型——在#define后,直接加上一个“单词”,那么它的作用就是有条件编译。看看下面的例子:

#ifdef DEBUG_MODE
printf("Debug mode is active!");
#endif

  意思是:如果程序的开始包含#define DEBUG_MODE,那么就printf(),否则退出。这个对于你跟踪程序的逻辑错误是很有帮助的。

  WinMain()函数

  DOS下的C语言从main()开始,Windows下的C语言从WinMain()开始,一个空的WinMain()函数是这样的:

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
return(0);
}

  一个函数即使什么也没做,也应该返回一个值。是的,有好多东西我们不熟悉。首先的首先,WINAPI是个什么声明?WINA......

阅读全文(1849) | 评论:0

程序员学习的革命,教你如何使用大脑(2007-02-13 12:00:00)

摘要:程序员学习的革命,教你如何使用大脑
很多人搞技术,还有很多转行搞技术,搞了一段时间终于发现,自己不适合作技术,又退了回去。要我说其实就是用脑方式的问题,真的学会适当的用脑方式,编程编起来才得心应手,才能找到编程的快乐。 有时候,我们问到很多高手详细的技术问题,他们马上用程序给你实现出来,而且运行无误,这应该是左脑高手。左脑:是作抽象化符号处理的。 而另外一些高手,我们问他们请教设计方案的时候,简单的在纸上勾勒几笔,大致的设计方案图就呈现出来,之后的check,他多半不看你程序,只让你给他讲讲大框儿便能发现问题。这样的的应该是右脑高手,右脑:形象化分类处理,我公司以前的老板是技术出身,每次检查我的程序的时候,都要让我给他讲程序,他从来不看我的代码。人家讲话,你的程序在我这里讲明白了才算通过,连你自己都想不通,那就别上手,想明白了再说。 当然,左脑和右脑结合是最好的方式,但是现代人对右脑的应用没有得到很好的开发,人刚生出来的时候最开始发育的是右脑,之后的3年中主要也是使用右脑,然后才是逐渐的在右脑和左脑架起一个沟通的桥梁,扶助左脑的建立,随后左脑逐步的完善。随着学校的教育,左脑的使用频率越来越高,比例上成年的使用左脑远远大于右脑。但是值得注意的是,右脑的信息存储容量是左脑的100万倍,如果得不到很好的右脑利用,那么岂不是浪费了很大的资源。 另外,论坛上,有人调查过,编码人员每天要有多少代码量,剩下的时间在干什么?平均是150行左右,当然干外包的要多一点。不过,星星多的,基本每天编程的时间不超过工作时间的20%,剩下的时间在思考,或者说这些时间在大脑里面勾勒出来程序的图,也就是常说的画脑图。看来很多大牛,在用脑上,右脑的使用还是高于左脑的。 对于画脑图这个概念,又叫做思维导图、心智地图,心像图,心智图,Mind Map,Mind mapping, 可以视之为一个树状图或分类图。不要一行行地作记录,而是画脑图。用树状结构和图像再辅以颜色、符号、类型和关联来画脑图。脑图法,是由托尼·布赞发明的一种方法。在他杰出的新著《脑图之书—发散性思维》(TheMindMapBook—RadiantThinking)里,有对这种方法很好的介绍。 顺便说一句,编程中什么语言好,这是个历来已久的话题,也没有必要去深究。入门打好编程基础以一本常用语言做实现手段(一般都选......

阅读全文(1619) | 评论:0