使用git管理代码

在编写代码的过程中,免不了版本管理工具来协助开发,之前自己写一些小项目的时候,都是直接保存某一时刻的项目文件夹,随着项目代码越写越多,简单的手动备份就不好用了。现在好多项目都使用git来管理代码,于是我就找了些这方面的资料,决定使用git来作为我今后的代码管理工具。

调用setjmp()和longjmp()处理异常

C语言没有像C++、Java等面向对象语言的try/catch异常处理模块,如果要在C中对异常进行处理,我通常给可能产生异常的函数返回值中加个错误代码,if条件判断函数返回值,在if代码块中处理异常,但是这样有一个致命的缺陷:异常处理前后的寄存器状态发生了改变,可能导致后续代码调用的错误。

C语言打印局部变量输出-858993460

使用vc++2013编译c语言,main函数中定义局部变量,而且没有初始化该局部变量,尝试用printf打印这些变量: #include int main() { int k; printf(“%d\n”, k); return 0; } 运行结果为: -858993460,查看程序的反汇编代码,有一段初始化栈段的代码,将ebp到ebp-0D8h的字节都赋值为0CCh,定义的局部变量都存储在这些初始化的栈段中。

C语言指针剖析

在使用c语言编程解决实际问题的时候,一般都会定义各种的变量,包括基本数据类型、指针、数组、结构体等,然后调用库函数处理数据,或是自己编写函数处理,最后程序结束。如果c程序不允许变量,那么你必须手动对内存进行操作,类似汇编语言,在c程序底层,一切的操作都是将内存中的数据拿到寄存器中,再把寄存器中的数据放到内存中,都是指针的操作。所以只要有指针,就完全可以替代各种变量,甚至函数操作。

汇编指令jmp的使用

汇编语言编程中,如果要实现类似高级语言中的分支和循环等,就必须要使用各种的转移指令,包含无条件转移指令(如jmp)、条件转移指令(如jcxz)、循环指令(如loop)、中断等。在8086CPU上,转移指令的本质是修改寄存器cs和ip的值,将其执行下一条要执行的指令,最基础的无条件跳转指令jmp,就是根据要跳转到的位置修改ip的值。

C语言不定参数的解决方法

C语言中,函数的参数个数和类型一般在声明函数时确定,但当声明函数时不能确定参数的个数和类型时,就需要使用“…”作为参数占位符,表示不定参数的内存地址。 解决不定参数的方法就是按照指定的类型读取栈中的不定参数,并且指定一个结束标志,每次输出前判断结束标志。

C语言中的静态局部变量

在C语言中,局部变量是存储在栈段中的,在进入函数后分配内存单元,在函数退出前释放占用的内存。如果在局部变量前加static就得到静态局部变量,静态局部变量存储在数据段中,在函数结束后仍然保存在内存中,再次调用函数时,继续调用之前的静态局部变量值。

C语言的链接原理

原程序文件(.c文件)需要进行编译、连接两个步骤生成exe文件,多个obj文件中的代码可以存储在一个lib文件中,一个exe文件中可能包含来自多个obj文件和lib文件中的代码。 对于tc2.0开发环境,cs.lib、emu.lib、maths.lib等lib文件中存储着C语言库函数的代码,可以直接调用printf()。

汇编语言实现指针操作

在C语言中,强大的指针操作大大增强了程序的灵活性,我们可以直接操作内存中的数据进行运算,但是指针又是很难理解的,我最初学习C语言的时候,总是被两个问题所困扰:1、既然指针是一个变量,那么它在内存的存在形式如何?2、指针保存了变量的地址,不同的变量类型对于了不同的指针类型,这种不同的指针类型在内存中是如何体现的呢?