C/C++
蜗牛快跑
这个作者很懒,什么都没留下…
展开
-
标准输入与getchar()
C语言标准输入(stdin)采用的是行缓冲模式,即只在回车键按下后界面上的字符才会被输入到输入缓冲区以供读取. getchar()用于从输入缓冲区中读取数据,当读不到数据时将返回EOF(不含首次从输入缓冲区中读取数据情况),标准输入时须注意情况: 1.仅输入终止符(Linux: Ctrl+D, Windows: Ctrl+Z)之前的字符串(不含输入终止符)能被输入到输入缓冲区中 2.回车键也是一种字符,在输入终止符之前的回车键也会被输入到输入缓冲区中#include原创 2011-01-29 12:08:00 · 1302 阅读 · 1 评论 -
跟我一起写 Makefile(四)
书写规则————规则包含两个部分,一个是依赖关系,一个是生成目标的方法。在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。如果第一条规则中的目标有很多个,那么,转载 2012-02-26 18:54:49 · 561 阅读 · 0 评论 -
跟我一起写 Makefile(七)
使用变量————在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方。其与C/C++所不同的是,你可以在Makefile中改变其值。在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。变量的命名字可以包含字符、数字,下划线(可以转载 2012-02-28 10:28:29 · 490 阅读 · 0 评论 -
跟我一起写 Makefile(五)
六、多目标Makefile的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似。于是我们就能把其合并起来。当然,多个目标的生成规则的执行命令是同一个,这可能会可我们带来麻烦,不过好在我们的可以使用一个自动化变量“$@”(关于自动化变量,将在后面讲述),这个变量表示着目前规则中所有的目标的集合,这样说可能很抽象,还是看一个例子吧。转载 2012-02-27 12:49:54 · 4337 阅读 · 1 评论 -
跟我一起写 Makefile(六)
书写命令————每条规则中的命令和操作系统Shell的命令行是一致的。make会按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟在依赖规则后面的分号后的。在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以Tab键开头的,那么make会认为其是一个空命令。我们在UNIX下可能会使用不同的Shell,但是make的命令默认是被“/bin/转载 2012-02-27 21:13:14 · 468 阅读 · 0 评论 -
跟我一起写 Makefile(九)
使用函数————在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。一、函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $( )或是 ${ }这里,就是函数转载 2012-02-29 11:28:55 · 486 阅读 · 0 评论 -
跟我一起写 Makefile(十一)
make 的运行——————一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同的时候使用不同的编译规则,等等。本章节就是讲述如何使用make命令的。一、make的退出码make命令执行后有三个退出码:转载 2012-03-01 10:39:07 · 550 阅读 · 0 评论 -
跟我一起写 Makefile(十)
四、foreach 函数 foreach函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语句,或是C-Shell(/bin/csh)中的foreach语句而构建的。它的语法是: $(foreach ,,) 这个函数的意思是,把参数中的转载 2012-03-01 09:25:36 · 499 阅读 · 0 评论 -
跟我一起写 Makefile(八)
六、多行变量 还有一种设置变量值的方法是使用define关键字。使用define关键字设置变量的值可以有换行,这有利于定义一系列的命令(前面我们讲过“命令包”的技术就是利用这个关键字)。define指示符后面跟的是变量的名字,而重起一行定义变量的值,定义是以endef关键字结束。其工作方式和“=”操作符一样。变量的值可以包含函数、命令、文字,或是其它变量。因为命令需要以[Tab]键转载 2012-02-29 11:07:00 · 529 阅读 · 0 评论 -
跟我一起写 Makefile(十二)
隐含规则————在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]文件)。本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不需要我们再写出来的规则。“隐含规则”也就是一种惯例,make会按照这种“惯例”心照不喧地来运行,那怕我们的转载 2012-03-01 11:29:15 · 462 阅读 · 0 评论 -
跟我一起写 Makefile(十三)
五、定义模式规则你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。在依赖目标中同样可以使用"%",只是依赖目标中的"%"的取值,取决于其目标。有一点需要注意的是,"%"的展开发生在变量和函数的展开之后,变量和函数的展开发生在make载入Makefile时,而模式规则中的"%"则发生转载 2012-03-02 11:43:53 · 459 阅读 · 0 评论 -
跟我一起写 Makefile(十四)
使用make更新函数库文件———————————函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。一、函数库文件的成员一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成: archive(member)这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了"ar"转载 2012-03-02 11:45:42 · 563 阅读 · 0 评论 -
跟我一起写 Makefile(三)
Makefile 总述———————一、Makefile里有什么?Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。2、隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我转载 2012-02-26 18:26:55 · 543 阅读 · 0 评论 -
跟我一起写 Makefile(一)
跟我一起写 Makefile 陈皓概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软转载 2012-02-26 12:48:02 · 720 阅读 · 0 评论 -
详解C中volatile关键字
本文转自:chao_yu原文链接:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764231.html 详解C中volatile关键字 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或转载 2011-12-06 15:36:58 · 406 阅读 · 0 评论 -
原码反码补码加减运算
原码加减法比较复杂,需要事先判断数的符号,然后决定做加法还是做减法运算。 补码的加减法运算比较简单,采用补码加减法运算,可将“正数加负数”的操作,转化为“正数加正数”的操作。一般计算机采取补码进行加减法运算。因减法运算可看作被减数加上一个减数的负值,即A-B=A+(-转载 2011-08-10 16:08:48 · 15444 阅读 · 2 评论 -
sscanf 与scanf
sscanf 名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。 其中的format可以是一个或多个 {%[*]转载 2011-02-28 23:01:00 · 1180 阅读 · 0 评论 -
sscanf 、scanf函数与空白处理
开始使用sscanf与scanf函数时,其对空白的处理让我郁闷了很久,今天抽空研究了颇有收获,随笔记下,望对网友们有所帮助 int sscanf(char *string, char *format, arg1, arg2, ...)与int scanf(char *format, ...)是用于从字符串(或输入流)中依据指定的格式提取目标数据的函数,其提取规则大体如下: 1.提取数值类型数据(format中%d之类所对应数据): 使用了一个%d说明符来读取一个整数,scan原创 2011-03-01 16:14:00 · 8921 阅读 · 0 评论 -
Linkages of identifiers(链接属性)
Linkages of identifiers(链接属性)1.An identifier declared in different scopes or in the same scope morethan once can be made to refer to the same object or function by a processcalled linkage.There are three kinds of linkage: external, internal, and none.2.I原创 2011-03-10 17:37:00 · 800 阅读 · 0 评论 -
作用域、链接属性和存储类型的总结
<br />原创 2011-03-10 18:06:00 · 634 阅读 · 0 评论 -
C语言里的左移和右移运算
先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用int i = 1;i = i 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因)需要注意的一个问题是int类型最左端的符号位和移位移出去的情况.我们知道,int是有符号的整形转载 2011-03-11 15:42:00 · 1050 阅读 · 0 评论 -
RHEL5 下安装GCC编译环境
<br />系统默认安装时并没有安装编译环境,也就是说GCC也没有装进去。<br /> <br />所幸的是RHEL的光盘上的Server目录里已经包含了gcc和其所依赖的软件<br /> <br />开始安装:按顺序安装以下包就可以完成GCC的安装了<br /> <br />找出下列软件,并安按照顺序安装即可。<br /> <br />rpm -ivh kernel-headers-2.6.18-128.el5.i386.rpm<br /> <br />rpm -i转载 2011-04-10 17:14:00 · 608 阅读 · 0 评论 -
函数指针
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数转载 2011-07-04 14:30:37 · 519 阅读 · 0 评论 -
C语言文件读写操作
在C语言中用一个指针变量指向一个文件, 这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。 定义说明文件指针的一般形式为: FILE* 指针变量标识符; 其中FILE应为大写,它实际上是由系统定义的一个结构(如下图, 该结构中含有文件名、文件转载 2011-02-16 11:46:00 · 6180 阅读 · 0 评论 -
浅谈无缓存I/O操作和标准I/O文件操作区别 (转载)
首先,先稍微了解系统调用的概念: 系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将原创 2011-07-24 23:11:51 · 2661 阅读 · 1 评论 -
另一个视角解读计算机编码-补码编码
数学是一个完全抽象的学科,而计算机是这个学科的一种形象化的实现,显然无法处理一些仅在抽象意义上有意义的特殊“数字”,比如无穷之类的东西,。像数学中的加法,乘法这样运算,计算机必须给与实现,然而由于数学中的实数加法(以及别的运算)是建立在实数域上的,而实数域又是无限的,而计算机只能转载 2011-08-09 21:23:31 · 467 阅读 · 0 评论 -
进位与溢出
进位与溢出Cy位是进位位,用来表示本次无符号数运算结果的溢出溢出。由于无符号数的最高有效位只有数位意义而无符号意义,所以该位所产生的进位应该是本次运算结果的实际进位值。所以说:进位位Cy是在给定二进制数的位数范围内,代表了本次运算结果的溢出情况。另一方面,它所保存的进位值有时转载 2011-08-09 23:28:18 · 4241 阅读 · 0 评论 -
跟我一起写 Makefile(二)
三、make是如何工作的在默认的方式下,也就是我们只输入make命令。那么, 1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。 3、如果edit文件不存在,或是edit所依赖的后面的转载 2012-02-26 17:44:10 · 601 阅读 · 0 评论