1. 程式人生 > 實用技巧 >關於vscode編譯c/c++ 使用c++11的一個解決辦法,針對c和c++混編出現的問題的解決方法 [-fpermissive]出現後如何解決

關於vscode編譯c/c++ 使用c++11的一個解決辦法,針對c和c++混編出現的問題的解決方法 [-fpermissive]出現後如何解決

1.  vscode配置c或者c++編譯開發環境,一般情況下足夠了,大概教程網上有很多,但是都隻言片語,留一手.我在採坑無數次之後總結了一些經驗如下

    vscode編譯有兩種形式,一種是右鍵,這種形式,使用預設setting,都不知道在哪裡配置的,可控性賊差,並且有一點必須注意,vscode預設只會編譯一個檔案,這一點賊坑(哪個寫c++的只寫一個main檔案)

    另一種編譯方式是類似於命令列形式,不同的是,得需要自己寫一些檔案配置啥的,但是有一點好處是可控,如下

2.  c與c++混編,可能會出現指標強制轉化,編譯通不過的問題,  網上有說我以上遇到的問題解決方案是加上 CXXFLAGS=-fpermissive

    但是加在哪裡也沒說,按照這個方向查詢也沒具體些的資訊,不過我猜測應該是cmake中的內容,

    因此在遇到c和c++混編的情況下,我還是建議,儘可能的使用專業的ide,比如virsual studio 2019或者qt,或者clion(我個人推薦clion)

    clion安裝  https://www.jianshu.com/p/1aa989808e15

3.  記錄下正常情況下vscode配置c++環境的幾個檔案和步驟

    1 在專案根目錄下建立.vscode檔案,並建立兩個資料夾,一個用來debug,一個用來執行指令

    launch.json

{
    "version": "0.2.0",
    
"configurations": [ { "name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示 "type": "cppdbg", // 配置型別,這裡只能為cppdbg "request": "launch", // 請求配置型別,可以為launch(啟動)或attach(附加) "program": "${fileDirname}/${fileBasenameNoExtension}.exe",// 將要進行除錯的程式的路徑
"args": [], // 程式除錯時傳遞給程式的命令列引數,一般設為空即可 "stopAtEntry": false, // 設為true時程式將暫停在程式入口處,一般設定為false "cwd": "${workspaceRoot}",// 除錯程式時的工作目錄,一般為${workspaceRoot}即程式碼所在目錄 "environment": [], "externalConsole": true,// 除錯時是否顯示控制檯視窗,一般設定為true顯示控制檯 "MIMode": "gdb", "miDebuggerPath": "E:\\c-c++\\TDM-GCC-64\\bin\\gdb64.exe",// miDebugger的路徑,注意這裡要與MinGw的路徑對應 "preLaunchTask": "g++", // 除錯會話開始前執行的任務,一般為編譯程式,c++為g++, c為gcc "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }

    tasks.json

{
    "version": "2.0.0",
    "tasks": [{
            "label": "g++",
            "command": "g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${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
                }
            },
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

      2 記得新增環境變數