一、C程序代码
#include <stdio.h>
// 验证当前编译的程序是32位还是64位
int GetExeBits()
{
return sizeof(char*) * 8;
}
int main(int argc, char* argv[])
{
printf("current app bit is:%d bit\n", GetExeBits());
return 0;
}
二、编译命令(cd TDM-GCC-64\bin):
PS D:\TDM-GCC-64\bin> gcc .\test.cpp -m32 -o test
PS D:\TDM-GCC-64\bin> ./test.exe
current app bit is 32 bit
PS D:\TDM-GCC-64\bin> gcc .\test.cpp -m64 -o test
PS D:\TDM-GCC-64\bin> ./test.exe
current app bit is 64 bit
PS D:\TDM-GCC-64\bin> gcc .\test.cpp -o test
PS D:\TDM-GCC-64\bin> ./test.exe
current app bit is 64 bit
三、实验结论:
TDM-GCC-64的编译器默认编译出来的是64位应用
四、总结:
32位版:
-m32 :生成32位的应用。
64位版:
-m64 :生成64位的应用。
debug版:
-g :生成调试信息。
release版:
1) -static :进行静态链接,使程序不再依赖动态库。
2) -O3 : 进行最快速度优化,后面的数字是优化等级
3)-DNDEBUG:定义NDEBUG宏,屏蔽断言(assert函数导致的断言)。
当不使用-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的应用
1)32位Linux下的GCC,默认是编译为32位应用。
2)64位Linux下的GCC,默认是编译为64位应用。
3)Window系统下的MinGW,总是编译为32位应用。因为MinGW只支持32位应用。
4)Window系统下的MinGW-w64(例如安装了TDM-GCC,选择MinGW-w64),默认是编译为64位应用。
附加:
1.Windows控制台输出中文乱码(UTF-8)
使用 SetConsoleOutputCP(65001);
设置控制台输出代码页为UTF8,现在使用默认的控制台运行可以看到936代码页下也能正常显示
例子:
将下列代码保存位UTF-8格式的文件,然后编译后运行测试
int main(int argc, char *argv[]) {
SetConsoleOutputCP(65001);
printf("aaa测试下中文11\n");
return 0;
}
2.关闭编码格式
-finput-charset 指定源文件的编码(若不指定,默认是UTF-8)
-fexec-charset 指定多字节字符串(const char*)常量在编译后的程序里保存的编码集(若不指定,默认是UTF-8)
-fwide-exec-charset 指定宽字节字符串(const wchar_t*)常量在编译后的程序里的保存的编码集
例子:
gcc Test.cpp -g -lstdc++ -finput-charset=GB2312 -fexec-charset=GB2312