c语言编译器

Keil的c语言编译器

守給你的承諾、 提交于 2020-04-07 13:18:26
我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论。 (1) 全局变量 :如果程序中定义了全局变量,而且初始值不是0。此时,在程序调到main()函数执行前,除了要进行内存清零、初始化堆栈外,还需要将全局变量的初始值加载到内存的指定区域(编译过程中为全局变量分配的空间)。 (2) 局部变量 :局部变量通常使用那些缓冲内存(用作保存运算过程的中间数据)。初始化的局部变量,通常程序中都会对用到的缓冲内存重新赋值。 但是,对于没有初始化的局部变量需要注意“ 无知情的情况下被赋了值 ”。下边的子函数中定义了变量,但是并未初始化。按照标准C语言的准则,未初始化的变量的初值默认是0,但是KEIL对未初始化的局部变量的处理不是这样的。 void function() { unsigned char k,j; if (k<j) ; else { } } 实际的编译后的反汇编程序看不到对这些局部变量的初始化。这些局部变量可能会占据那些还未被使用的内存或者其他子函数中局部变量已经释放的空间(但是这些空间可能并没有清零)。倘若是后者,其他函数局部变量释放的空间由于并没有清零,所以这些局部变量就一开始被赋了不能预先知道的值,这是不希望看到的。所以如果使用一个局部变量,就给这个变量赋个初值。 (3)谨防程序在“ 无知情的情况下被优化 ”

MinGW配置C语言编译器gcc和g++

回眸只為那壹抹淺笑 提交于 2019-12-14 06:59:53
首先,在 https://sourceforge.net/projects/mingw/files/latest/download 下载安装MinGW,如下图所示: 点Installation->Apply all changes.,找到 mingw32-gcc.bin (c语言编译器), mingw32-gcc-g++.bin (c++编译器), 和 mingw32-gdb.bin (用来调试编译后文件),安装这三个编译器,然后设置环境变量D:\MinGW\bin,大功告成。 此时在cmd 输入 gcc -v 或 g++ -v ,便可查到其版本信息(查不到说明没安装好)。 假设已有一个C语言文件test.c,那么在命令行运行 gcc -g test.c -o test.exe ,便可生产呢个可执行文件。 其中gcc是编译命令,-g参数是表示编译时带上可调试记号,不然编译好的东西只能运行不能调试,-o 是表示指定输出文件,后面紧跟输出文件的名字,这一条指令就可以将c文件编译成一个可执行的二进制文件。 来源: CSDN 作者: Louise_Trender 链接: https://blog.csdn.net/Louise_Trender/article/details/103505434