? ?最开始接触c/c++时,老师给推荐的软件是dev-c++,这个比较方便,但功能性较弱,所以接触到VS,又发现VS太过臃肿,用于一般的小编程文件不太合适,而vscode则是比较适合大学生的一款编程软件。当初第一次接触到vscode,只会在上面写程序,但不知道怎么运行,查了很多资料,发现好多都是不起作用,最终终于弄好,也是不容易,然后最近发现不需要配置环境,只需用自带的code runner就可以在终端输出,但这种输出对C/C++的中文输出会出现乱码现象。
本文针对小白(可能很多地方很简单)
? ?VS code cmd 配置
? 笔者认为对于C/C++的编译运动最好的就是用cmd,也是和dev一样,也更好可以适应,个人感觉终端输出不是很容易识别。
首先对扩展包的下载肯定是最基础的 ,code runner也推荐下载,因为对于python和一些其他语言,还是选择通过终端输出的方式调试比较好。
?
?我的文件夹里设置的是cpp和exe分开的两个文件夹,当然也可以选择放在一起,但要修改一些.vscode文件夹里面的配置,如果不想麻烦也是建议和我这样分开。
mingw64的下载
?在配置cmd前提是有gcc,就是mingw64的下载,我是下载下来放在D盘
?
下面是.vscode里的4个配置:
c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "D:/mingw64/bin/gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
需要修改的是mingw64的bin文件夹的位置,如果你和我一样直接放在D盘,就不用修改了
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "cmd启动(不自动退出)", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "C:/Windows/system32/cmd.exe", // 将要进行调试的程序的路径
"args": [
"/K",
"F:/c++/exe/${fileBasenameNoExtension}.exe"
], // 程序调试时传递给程序的命令行参数,/K指执行完命令后不关闭命令窗口
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"environment": [],
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",
"miDebuggerPath": "D:/mingw64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "gdb启动(断点可用)", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "F:/c++/exe/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"environment": [],
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",
"miDebuggerPath": "D:/mingw64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
也是根据自己的cpp文件夹和exe文件夹的位置修改,下面两个类同。
settings.json
{
"files.associations": {
"type_traits": "c",
"array": "c",
"deque": "c",
"string": "c",
"unordered_map": "c",
"vector": "c",
"string_view": "c",
"initializer_list": "c",
"cmath": "c",
"queue": "cpp",
"ostream": "cpp",
"iostream": "cpp",
"optional": "cpp",
"istream": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"utility": "cpp",
"atomic": "cpp",
"bit": "cpp",
"*.tcc": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"compare": "cpp",
"concepts": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"iterator": "cpp",
"memory": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"random": "cpp",
"iosfwd": "cpp",
"limits": "cpp",
"new": "cpp",
"ranges": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"typeinfo": "cpp"
},
"C_Cpp.errorSquiggles": "Disabled"
}
tasks.json
{
"version": "2.0.0",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${fileBasenameNoExtension}.exe"
], // 编译命令参数
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"tasks": [
{
"type": "shell",
"label": "gcc",
"command": "D:/mingw64/bin/gcc.exe",
"args": [
"-g",
"${file}",
"-o",
"F:/c++/exe/${fileBasenameNoExtension}.exe",
"-finput-charset=UTF-8",
"-fexec-charset=GBK"
],
"options": {
"cwd": "D:/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
},
{
"type": "shell",
"label": "g++",
"command": "D:/mingw64/bin/g++.exe",
"args": [
"-g",
"${file}",
"-o",
"F:/c++/exe/${fileBasenameNoExtension}.exe",
"-finput-charset=UTF-8",
"-fexec-charset=GBK"
],
"options": {
"cwd": "D:/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
需要注意的就是,所有cpp里面或者exe里的文件或者路径都不能出现中文(后面也有教程,可以解决这个问题,不过代价蛮大)
如果出现中文路径,cmd不能正常运行
中文乱码问题分析与讨论
?
?对于cmd输出,不会出现中文乱码。而对于终端输出(C/C++),则会出现乱码。
?出现乱码,一开始笔者认为,是软件本身对终端输出的毛病,于是乎,试着尝试了其他语言,发现同样的代码在python输出不会出现乱码。
?也就是说只有在c/c++的终端输出出现问题,于是就想解决这个办法
参考:https://blog.csdn.net/weixin_40040107/article/details/103721554?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162781239216780271593432%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162781239216780271593432&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-4-103721554.first_rank_v2_pc_rank_v29&utm_term=vscode%E7%BB%88%E7%AB%AF%E8%BE%93%E5%87%BA%E6%B1%89%E5%AD%97&spm=1018.2226.3001.4187
发现终端输出的问题果然解决了,而且中文路径的问题也随之解决了,文件的命名不再限制不能设置中文,这对于我们记录编程文件有很大帮助,但这引发了其他一系列问题:
比如笔者的dev-C++再登录已经是一片乱码,所有的数据都不会显示,而修该回来就又好了。
于是笔者又去查阅资料:https://blog.csdn.net/lzyws739307453/article/details/89823900?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162781239216780271593432%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162781239216780271593432&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-7-89823900.first_rank_v2_pc_rank_v29&utm_term=vscode%E7%BB%88%E7%AB%AF%E8%BE%93%E5%87%BA%E6%B1%89%E5%AD%97&spm=1018.2226.3001.4187
就是说,cmd和终端输出不能兼容,读到这里,笔者也放弃了,老老实实用自己的cmd输出,但总的来说,cmd输出个人感觉更优,因为cmd对于一些图形编程,有着更好的展示效果,而再终端输出,则没有太好的展示效果。
|