感谢大家对我之前文章的支持,之前写的文章不是很完善,有部分朋友私信我问我一些问题,针对这些问题,我在这里为大家统一解决一下:
主要问题有这几个:
1.还是中文乱码问题,上两篇由于要讲的东西太多,我太懒,所有没有给大家写完整
😫😫😫😫😫😫😫😫😫原谅我😫😫😫😫😫😫😫😫😫
2. 还有这里写了半没有写完🤥🤥🤥🤥🤥🤥🤥
问题解决
问题原因:
- vscode内部终端是UTF-8编码,外部控制台是GBK编码
- 编译的可执行文件默认是UTF-8编码
- 所以用外部控制台时就会出现中文乱码现象
解决办法:
- 在用外部控制台运行编译可执行文件时,将文本直接编译成GBK编码
- 用内部控制台运行时编译可执行文件时,默认将文本编译成UTF-8编码
1.task.json修改如下
源码如下
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C_Compile_Single_File", //任务名称,launch.json调用tsaks任务就要用到这个
"command": "C:\\mingw64\\bin\\gcc.exe",
"args": [ //这个是gcc编译C/C++的命令脚本,不清楚可以在网上查找gcc如何编译C/C++
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\exe\\${fileBasenameNoExtension}.exe"// 内部控制台调用的任务里面就没有转换编码那个命令
],
"options": {
"cwd": "C:/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器: C:/mingw64/bin/gcc.exe"
},
{
"type": "cppbuild",
"label": "C_Compile_Single_File_GBK",
"command": "C:\\mingw64\\bin\\gcc.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\exe\\${fileBasenameNoExtension}.exe",
"-fexec-charset=GBK"//将可执行程序代码设置为GBK
],
"options": {
"cwd": "C:/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器: C:/mingw64/bin/gcc.exe"
}
]
}
2.launch.json修改如下
下面这两种运行配置都是外部控制台,区别在于:
第一个只可以调试,因为他没有自动暂停程序,也就是会闪退,这个问题好多人都碰到过。在这里为大家解决了。
第二个只可以运行,因为他会跳过断点。但带有程序自动暂停,也就是我们熟知的“请按任意键继续...”
源码如下
{
"version": "0.2.0",
"configurations": [
{
"name": "C | 单文件(编译|调试)", //这个就是显示在运行这里的名字
"preLaunchTask": "C_Compile_Single_File", //这个任务对应的就是task.json文件里的一个任务
"type": "cppdbg", // 配置类型cppdbg就是内部控制台,cppvsdbg
"request": "launch",
"program": "${fileDirname}\\exe\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "c:\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
},
{
"name": "C | 单文件(外部调试)",
"preLaunchTask": "C_Compile_Single_File_GBK",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\exe\\${fileBasenameNoExtension}.exe", //如果运行不成功在运行的文件统计完目录下面创建一个名为exe的文件
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "c:\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
},
{
"name": "C | 单文件外部(不可调试)",
"preLaunchTask": "C_Compile_Single_File_GBK",
"type": "cppvsdbg",//类型为cppvsdbg意思为windows启动也就是外部控制台,不过这个是自带一个程序暂停的
"request": "launch",
"program": "${fileDirname}\\exe\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"console": "externalTerminal"
}
]
}
这里我放一个超链接到我的上一篇博客,大家可以去文章末尾下载我已经配置好的;
多文件编译,原理也是差不多,就是改了launch和task.json里面的一些路径
这个东西要讲好真的不容易🤥🤥🤥🤥
大家有不会的可以在底下留言或者私信我,我看到了都会为大家解决。
这个专栏已经发了好多期了,已经水不动了😅