VSCode配置C/C++環境時相關錯誤解決方法



關於C/C++路徑不能有中文

昨天下午安裝C++環境的時候出了點問題

查了一下,是路徑有中文,但是我建的文件夾在桌面上,放到D盤的時候運行又沒能調出cmd,只有build。

思來想去決定改賬戶名稱(我賬戶在買電腦裝Win10的時候寫的中文,難免以后還會出現路徑中文問題)。

然后就發現文件夾名字改不了

查了一下,原因就在於你的賬戶正在使用這個文件夾,系統不可能讓正在運行的賬戶文件被改了路徑名稱

於是就需要創建一個新的賬戶,但是我的Win10版本沒辦法常規添加本地賬戶

這里沒有本地用戶與組

win + r + mmc 打開控制台,選擇添加 用戶與組

用戶與賬戶這塊老雞肋了,只能添加微軟賬戶而且跳轉微軟商店又顯示沒這應用

那么,就需要 win + r + netplwiz (全程是Net Person Login Wizard,是管理Windows系統登錄賬戶的)

這樣就能添加一個本地賬戶,然后將其設置為管理員(只有管理員才能有權限修改C盤用戶文件夾名字),之后注銷原先賬戶,用新注冊的賬戶登錄,進行修改。

在這里還需要修改一下注冊表。

我之前沒有修改注冊表導致登回原先賬戶時Windows顯示無法登錄到賬戶,就給我了一個訪客臨時號,看到桌面是初始化的嚇得我還以為文件都沒了,但是在看到C盤與D盤文件都在時才意識到注冊表的問題

Win + r + Regedit

路徑在此,這幾個文件夾中找到有你原先id的那個,修改相應的那個ProfileImagePath,再重新登錄,就一切正常了。

備注

關於注冊表

注冊表是Windows系統存儲關於計算機配置信息的數據庫,包括了系統運行時需要調用的運行方式的設置。

Windows注冊表中包括的項目有:每個用戶的配置文件、計算機上安裝的程序和每個程序可以創建的文檔類型、文件夾和程序圖標的屬性設置、系統中的硬件、正在使用的端口等。

如果注冊表受到了破壞,輕則使windows的啟動過程出現異常,重則可能會導致整個Windows系統的完全癱瘓。


如何正確配置環境網上也有許多從零開始的教程了,這里就說幾點我遇到的問題

關於c_cpp_properties.json

ctrl + shift + p 搜索C/C++,有編輯配置(UI)和(json)區別,如果選的UI會省事很多,直接會有一個c_cpp_properties.json生成




關於“終端將被任務重用,按任意鍵關閉。”

在task.json中補上這一段(我自動生成的task.json中並無這段)

"presentation": {
		        "echo": true,
			"reveal": "always",
			"focus": false,
			"panel": "shared",
			"showReuseMessage": true,
			"clear": false
	         }

重點需要的是其中的 "panel": "shared",

有這個提示的原因是本地端口是被共享的,必須關閉一個進程才能執行另一個

不過我加了之后,運行還是有這句話,不過不影響我運行,那就不管了~(・ω< )★


關於運行完代碼cmd一閃而過

環境配置成功后無論是按F5還是Ctrl + F5均是cmd一閃而過

網上最簡單的解決方法就是,在return 0;之前加上一句getchar(),讓cmd等你輸入,這樣達到暫停效果

又或是高級些的,引入#include <stdlib.h>,代碼中加入system("pause");。這樣是很好的融入了代碼邏輯,但是很明顯增添了不必要的代碼,多引用了一個與本體代碼執行無關的頭文件

所以我更傾向於在launch.json中額外加入cmd啟動的代碼,這樣省事又好用

但是在我復制完代碼,加入launch.json后,出現了新的問題:

我原本是輸出hello world,但是我在改變輸出內容為hello后,輸出仍然是hello world,相當於壓根沒有編譯

而且 請按任意鍵繼續... 這句話直接接在了代碼輸出后面,顯得極其不美觀

但是我在命令行輸入的時候,卻能夠正常運行

換行的問題只需要在args中加入echo.就能解決問題。

而且需要注意的是,本身存在的/C已經起到了暫停作用,不需要再在args中加入pause,否則你需要敲兩下任意鍵才能關掉cmd

編譯的問題在仔細研究了launch.json各項含義,試圖尋找為什么沒有成功編譯時,找到了原因

"preLaunchTask": "task g++",這句話我創建launch.json時沒有,我自己補入了,但是這補入的是在gdb啟動的區域內,而我在網上復制的cmd啟動代碼中沒有這句

加上這句話,cmd啟動就能正常工作了

備注

附上我自己的launch.json

{
    // 使用 IntelliSense 了解相關屬性。 
    // 懸停以查看現有屬性的描述。
    // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "cmd",
            "args": [
            "/C",
            "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "&",
            "echo.",
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole":true,
            "preLaunchTask": "task g++",
        },
        {
            "name": "(gdb) 啟動",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",
            "preLaunchTask": "task g++",
            "setupCommands": [
                {
                    "description": "為 gdb 啟用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            
        }
    ]
}

gcc與g++區別

GCC:GNU Compiler Collection(GUN 編譯器集合),它可以編譯C、C++、JAV、Fortran、Pascal、Object-C、Ada等語言。

gcc是GCC中的GUN C Compiler(C 編譯器)

g++是GCC中的GUN C++ Compiler(C++編譯器)

從本質上而言,gcc和g++並不是編譯器,也不是編譯器的集合,它們是一種驅動器,根據參數中要編譯的文件的類型,調用對應的GUN編譯器

所以,准確的說法是:gcc調用了C compiler,而g++調用了C++ compiler

對於 *.c和*.cpp文件,gcc分別當做c和cpp文件編譯(c和cpp的語法強度是不一樣的)

對於 *.c和*.cpp文件,g++則統一當做cpp文件編譯

使用g++編譯文件時,g++會自動鏈接標准庫STL,而gcc不會自動鏈接STL

gcc在編譯C文件時,可使用的預定義宏是比較少的

gcc在編譯cpp文件時/g++在編譯c文件和cpp文件時(這時候gcc和g++調用的都是cpp文件的編譯器),會加入一些額外的宏

cmd的/?命令

這里用到了的就是/C

在cmd中執行不同語句時,需要用 & 隔開


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM