调用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程序底层,一切的操作都是将内存中的数据拿到寄存器中,再把寄存器中的数据放到内存中,都是指针的操作。所以只要有指针,就完全可以替代各种变量,甚至函数操作。