⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unix(linux) c编程问题精粹 - linx时代 - chinaunix_net.txt

📁 c语言的编程规范
💻 TXT
📖 第 1 页 / 共 2 页
字号:
              f.函数在有些地方有返回值,但在其他地方不返回. 
              g.函数调用在不同地方使得参数个数不同. 
              h.错误使用结构指针. 
              i.模糊使用操作符优先级. 
            呵呵呵,挺有用的吧! 

            []如何控制lint的输出? 
            有时lint会有一大屏一大屏的警告信息.但似乎并未指出错误.为了找出潜在的错误则需费心费力地浏览这些大量的警告信息. 
            但如果你的程序会分出几个独立的模块,在初级启动lint时不要用可选项.当对这些模块进行更改或扩充时,可以忽略与代码无关的某些警告.为此可用以下选择项: 

              -h  对判别是否有错,类型是否正确不给出启发式测试.   
              -v  不管函数中没有定义的参数 
              -u   不管被使用的变量和函数没有定义或定义了但没有使用. 

            []干脆,在程序中插入指令来影响lint运行.它看样子有些像注释. 
              /*notreached*/   不可达到的代码不给信息说明. 
              /*varargsn*/   函数的变量个数不作通常的检查,只检查开始n个参数的数据类型. 
              /*nostruct*/   对下一个表达式不作严格类型检查. 
              /*argused*/  下一函数中,不给出没被使用参数的警告信息. 
              /*lintlibrary*/  置于文件的开头,它将不给出没被使用函数的警告信息. 

            关于lint的更多用法,请用man lint来获知. 


                    第五章:使用make 

            []什么是make? 

              
            unix(linux)是一个天生的开发平台,我为此感到高兴.make是一个强力的工具.它能自动跟踪相互依赖的源代码块并组成一程序,使得很容易建立一可执行程序.make就是这种有依赖关系的部分和代码之间所作的规格说明. 



            [] 所有的程序都要使用make? 
              是的.尽管你只有几个简单的模块,但你需要有一种结构来支持它从简单走向复杂.除非你的程序已经盖棺定论. 

            []makefile由哪些组成? 
              makefile由以下几个部分组成: 

              注释. 
              ^^^^ 
              使用#符号插入.make将忽略#之后的任何内容以及其后的return键. 

              变量. 
              ^^^^ 
              
            make允许定义与shell变量类似的有名变量.比如,你定义了sources=prog.c,那么该变量的值$(scoures)就包含了源文件名. 


              依赖关系. 
              ^^^^^^^^ 
              左边是目标模块,后接一冒号.再接与该模块有依赖关系的模块. 

              命令.   
              ^^^^ 
              以tab键开始(即使用相同数量的空格也不能代替它). 


            []makefile示例 
              
            下面介绍一个简单的示例来说明make的用法.假设你的程序有两个源文件main.c和myc.c,一个位於子目录include下的头文件myhead.h,一个库由三个源文件myrout1.c,myrout2.c,myrout3.c产生. 

              其makefile文件为: 
              #一个基本的makefile文件. 
              #其中包括个人的头文件和个人库. 
              headers=include/myhead.h 
              sources=main.c myc.c 
              product=$(home)/bin/tool 
              lib=myrout.a 
              libsoures=myrout1.c myrout2.c myrout3.c 
              cc=cc 
              cflags=-g 
              all:$(product) 
              $(product):$(sources) 
                $(cc)$(cflags) -o $(product)$(sources) 
              lint:$(product) 
                lint $(sources)$(libsources) 
              
            哈哈,挺象shell编程的.如果你与我一样使用linux下的gcc,那么只要把上面的cc=cc改为cc=gcc即可.怎么样,想来一个更复杂点的吗? 


            []一个更为复杂的makefile 
              你是否注意到,在上例中,只要启动make,就会重新编译所有源代码. 
              如果你能看懂以下的makefile,恭喜恭喜,你通关了. 
              #一个更为复杂的makefile 
              headers=include/myhead.h 
              soures=main.c myc.c 
              objects=main.c myc.c 
              product=$(home)/bin/tool 
              lib=myrout.a 
              libsources=myrout1.c myrout2.c myrout3.c 
              libobjects=$(lib)(myrout1.o)$(lib)(myrout2.o)$(lib)(myrout3.o) 
              include=include 
              cc=cc 
              cflags=-g -xc 
              lint=lint 
              lintflags=-xc 
              all:$(product) 
              $(product):$(objects)$(lib) 
                $(cc)(cflags)-o$(product)$(objects)$(lib) 
              .c.o: $(headers) 
                $(cc)$(cflags) -c i$(include)$< 
              $(lib):$(headers)$(libsources) 
                $(cc)  $(cflags) -c $(?:.o=.c) 
                ar rv $(lib) $? 
                rm $? 
              .c.c:; 
              lint:  $(product) 
                $(lint)$(liniflags)$(sources)$libsources) 




                    第六章:优质无错编程 


              
            亲爱的,检查一下,你是否注意到了以下的细节?也就是说,你是否是一个合格的,能编写优质无错代码的程序员?要永远记住,编写无错代码是程序员的责任,而不是测试员.(摘录于本人的"细节页",因此本节将永远不会保持完整,欢迎您来充实她) 


            []所有程序员至少出现过的一个错误: 
              if(a=3){......}如果a等于3,那么...... 
              
            你至少要养成这样的习惯:当判断一个变量与一个常量是否相等时,将常量写在前面.这样即使你一不小心写成这样:if(3=a){......}在cc 
              之前就可以很容易发现它. 


            []老调重弹:逻辑操作符的优先权. 
              我不愿多嘴.总之,如果你一定要编写如下代码时: 
              if(a&0x1&&b&0x2){......} 
              你的手头最好有一本详尽的指南.或者你是这方面的专家. 

            []尽量不使用int数据类型. 
              这仅是一个忠告.你大可使用char,short,long数据类型.若干年以后,当你成长为高手之时,你会发现此时我的良苦用心. 

            []对于非整型函数一定要完整定义. 
                如  long float jisuan(char charr[],int chnum) 
                  {   long float lmydata; 
                    ... 
                    ... 
                    return(lmydata); } 

            []对于非整型函数的输入要当心. 
                如  long float lfnum; 
                    ...   
                    ... 
                  scanf("%lf",&lfnum); 

            []float 型的有效数字为7位.当多于7位时,第8位及以后的位将不准确,可以将其定义为long float型. 

            []文件的输入出尽量采用fread fwrite函数.只有当另有用途时才用fprintf fscanf 函数. 

            []对于数组及字符串的比较操作时要确认以''结束. 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -