C语言学习报告
学习C语言过程中遇到的一些有趣知识。
lxydo
这个作者很懒,什么都没留下…
展开
-
VIM不正常退出产生的swp文件
当你非正常关闭vim编辑器时(比如直接关闭终端或者电脑断电),会生成一个.swp文件,这个文件是一个临时交换文件,用来备份缓冲区中的内容。需要注意的是如果你并没有对文件进行修改,而只是读取文件,是不会产生.swp文件的。意外退出时,并不会覆盖旧的交换文件,而是会重新生成新的交换文件。而原来的文件中并不会有这次的修改,文件内容还是和打开时一样。例如,第一次产生的交换文件名为“.file.txt.swp原创 2016-07-05 13:32:09 · 33362 阅读 · 1 评论 -
C#中CLR(公共语言运行时)与IL(中间代码)
.net平台中的CLR首先要说明的是,.NET平台与C#不是一回事 它是C#,VB.net等程序运行的平台。CLR是公共语言运行时,是 .NET Framework的重要组成部分。它提供了内存管理、线程管理和异常处理等服务,而且还负责对代码实施严格的类型安全检查,保证了代码的正确性。事实上,类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Excep原创 2016-05-20 15:00:35 · 11141 阅读 · 0 评论 -
Java中的JIT机制对运行速度的优化
在先前的博客,Javac编译过程,简略讲述了Java compiler(javac),可以看出javac和C的compiler不一样, 它产生的是统一规格、与机器 binary 格式无关的 bytecode。 但是这也导致了严重的问题, interpret 通常比直接 compile 成 平台限定的原生 binary 码来得慢。但经过JIT的优化后,有些Java代码的执行速度甚至比c c++的更快。原创 2016-05-18 18:15:34 · 7627 阅读 · 2 评论 -
Javac编译过程
Javac编译器将*.java文件编译成为*.class文件的过程,这里的Javac编译器称为前端编译器;相对应的还有后端编译器,它在程序运行期间将字节码转变成机器码。原创 2016-05-17 11:52:54 · 6310 阅读 · 0 评论 -
实现浮点数的四舍五入RoundOff,保留几位小数
直接上代码,很简短double myRound(double d,int n){ d = d*pow(10,n); d += 0.5; d = (long)d; d = d/pow(10,n); return d;}上述代码中的d是我们要进行四舍五入的浮点数,n是我们要保留的小数点后位数。 四舍五入,主要靠这两行代码实现 d +原创 2016-01-29 10:22:56 · 4571 阅读 · 0 评论 -
C语言确定int short long的最大值
我们知道C语言中的int short long等类型,不像Java一样具体规定了范围大小,32位系统和64位系统不同,那我们在开发时该怎么确定这些类型的最大值呢?1、只需一小句代码,如下: ```printf("%d\n", ~(unsigned int)0 / 2);```分析:当无符号0以二进制储存在内存中的时候,每一位都为0,以32位int为例,(unsigned int)0的二进制为:原创 2015-08-21 09:06:13 · 7101 阅读 · 1 评论 -
巧用递归求字符串的子集
集合中的所有元素对于每一个子集来说,都有两种可能性:在子集中或是不在子集中。各个元素的这两种可能性组合起来,组成了一个集合的所有子集。这也是每一个集合都有2^n个子集的原因所在。比如 char *str = "abcd";对于str这个单词集合,其一个子集 空集,就是所有元素都不在该子集中,再如”abc”,这个子集,是元素a,b,c在子集中,元素d不在子集中。我们把元素这种在或不在子集原创 2016-01-25 18:04:09 · 3878 阅读 · 1 评论 -
巧用 C语言 断言机制助力程序debug
断言可以对在系统中隐藏很深,用其它手段极难发现的问题进行定位,并且输出信息很详细,可以很好地解决大多数C语言编译器错误信息输出不详细的问题。断言是对某种条件进行检测,若条件成立则无反应,否则程序执行到断言处终止,同时输出为成立的条件。assert是一个宏定义,并不是函数。 如#include <assert.h>//assert所在头文件 void main() { int i = 9;原创 2015-10-12 22:55:56 · 1486 阅读 · 0 评论 -
C语言速度优化之指针赋值与if判断
最近在写的一个项目需要优化处理速度,我写了一下程序来测试指针赋值与指针判断的速度比较。结果让我大吃一惊。#include <stdio.h>#include <stdlib.h>#include <time.h> int main(int argc, char *argv[]) { int j; int * tmp; clock_t start = clock();原创 2015-08-19 21:53:04 · 3654 阅读 · 0 评论 -
速记const 指针与指向const的指针
这两种情况很难分清,你只需注意在const后面的是\*符号还是变量,\*在后说明,const的是指针指向的对象,变量在后说明const的是指针本身原创 2015-08-16 21:25:15 · 1214 阅读 · 0 评论 -
typedef和#define究竟有什么区别?
typedef int * int_ptr ; 与#define int_ptr int * 作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。原创 2015-08-16 21:20:26 · 1947 阅读 · 0 评论 -
什么是c语言中的目标文件
c语言的编译分成编译和 链接两个阶段。在编译阶段,经过预处理,对宏定义指令进行替换,对条件编译指令进行处理,对#include指令里面的头文件进行添加后, 然后将其翻译成汇编代码,同时对代码进行优化,然后是汇编过程,将汇编代码翻译成机器指令,得到相应的包含代码段和数据段的目标文件。链接阶段,将调用的库文件的函数,引用的另一个源文原创 2015-07-24 15:31:00 · 2871 阅读 · 0 评论 -
C语言中对结构体或数组清零的最快方法
假设有结构体 addr;memset(&addr,0,sizeof(addr));memset()方法是在某个内存块内填充某一特定的值原创 2015-07-24 14:45:46 · 28241 阅读 · 0 评论