在VScode下配置C/C++環境(tasks.json、launch.json、c_cpp_properties.json)

文章目錄

  • 1. tasks.json、launch.json配置文件中參數(屬性)的說明
  • 2. tasks.json介紹
  • 3. launch.json介紹
  • 4. 直接生成tasks.json、launch.json配置文件的另外一種方式
  • 5. c_cpp_properties.json介紹
  • 6. 運行多個C/C++文件
  • 7. 命令行方式編譯C++

1. tasks.json、launch.json配置文件中參數(屬性)的說明

??首先我們創建了一個code項目,然后在code文件夾下分別建立了day1和day2兩個目錄(文件夾),最后在day1和day2文件夾下分別創建hello.cmain.cpp兩個文件,code項目的組織結構如下圖1所示。在VScode中,默認情況下code文件夾是一個workspace(工作區、工作空間)。

在這里插入圖片描述

圖1 code項目的組織結構

??下面,我們基于上面code項目的組織結構對tasks.json、launch.json配置文件中的參數(屬性)進行說明。(以hello.c文件為例)

(1)${workspaceFolder}:表示當前workspace(工作區、工作空間)文件夾的路徑,也即當前項目絕對路徑。例如:D:\code,code就是一個工作區。
(2)${fileDirname}:表示當前打開文件的絕對路徑,但不包括文件名。例如打開hello.c文件,該文件所在的絕對路徑(${fileDirname})為:D:\code\day1,day1就是hello.c文件的目錄。
(3)${workspaceFolder}/**:表示當前workspace(工作區、工作空間)文件夾的路徑,而且還會遞歸搜索所有子目錄。例如:當前項目的絕對路徑為D:\code,不僅要搜索code文件夾,還會遞歸搜索code的所有子目錄(子文件夾)。
(4)${workspaceRootFolderName}:表示workspace(工作區、工作空間)文件夾名字,也就是當前項目所在文件夾名字,例如code文件夾。
(5)${file}:表示當前打開的文件,指的是當前活動文件。包括絕對路徑,文件名,文件后綴名。例如:D:\code\day1\hello.c
(6)${fileBasename}:當前打開含有后綴的文件名,不包括路徑。
(7)${fileBasenameNoExtension}:表示當前打開的文件名,但不包括路徑和后綴名。
(8)cwd(current working directory):當前工作目錄,它是操作系統當前正在運行進程所在的目錄。在命令行界面(比如,cmd)中,用戶輸入命令時,默認情況下會在cwd下執行。

更多命令參考:變量參考
參考文章
最新VS code配置C/C++環境(tasks.json, launch.json,c_cpp_properties.json)及運行多個文件、配置Cmake
(上面這篇文章介紹的比較詳細,我下面總結的大部分內容都摘抄于該文章,非常感謝該博主)

2. tasks.json介紹

??tasks.json在編譯時用的到,配置tasks.json文件的步驟(下面以hello.c文件為例):

  1. 首先運行hello.c文件(點擊右上角的運行圖標),再點擊"C/C++:gcc.exe生成和調試活動文件",如圖2所示。
    在這里插入圖片描述
圖2 運行當前活動文件
  1. 經過步驟1,在工作區code文件夾下可以生成一個.vscode\tasks.json文件,如下圖3所示。除了tasks.json配置文件外,launch.json、c_cpp_properties.json配置文件也放在.vscode文件夾下。
    在這里插入圖片描述
圖3 產生的tasks.json文件
  1. tasks.json文件配置內容如下。在配置路徑時只能使用\\/隔開目錄。
{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活動文件","command": "d:\\AppInstall\\GCCAPP\\mingw64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "d:\\AppInstall\\GCCAPP\\mingw64\\bin"// "cwd": "${fileDirname}":有時候"cwd"的值為:"${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "調試器生成的任務。"}],"version": "2.0.0"
}

下面對tasks.json文件中的參數進行介紹:
(1)“type”:任務類型,可以取cppbuild、shell、process,三種執行時稍有差異,這里選擇默認cppbuild。
(2)“label”:任務標簽(標記),也稱任務名稱,對應的值可以更改。tasks.json文件中label對應的值要和launch.json里面"preLaunchTask"對應的值一致。
(3)“command”:編譯器及其路徑。.c用gcc.exe編譯器(C語言編譯器),.cpp用g++.exe編譯器(C++語言編譯器),還可以是Cmake、make。
(4)“args”:方括號里面是傳給gcc命令或g++命令的一系列參數,用于實現某些功能。
(5)“-g”:生成和調試有關的信息,launch.json會用到這些信息。如果少了這個"-g",生成的可執行文件就不能被調試了。
(6)“${file}”:編譯當前打開的.c(或.cpp)文件,此處是hello.c文件。
(7) “-o”:指定編譯的輸出,windows系統下輸出.exe文件。
(8)"${fileDirname}\\${fileBasenameNoExtension}.exe":表示在當前工作目錄下生成一個與源代碼同名的可執行文件,即在day1目錄下生成一個hello.exe文件。如果將${fileDirname}修改為${workspaceFolder},那么就會在當前工作區code文件夾下生成一個hello.exe文件。也可以在工作區code文件夾中建立一個bin文件夾,接著將編譯后輸出的可執行文件路徑設置為:"${fileDirname}\\bin\\${fileBasenameNoExtension}.exe"。同時需要將launch.json文件中的參數"program"設置為:"${fileDirname}\\bin\\${fileBasenameNoExtension}.exe"。那么就會在bin文件夾下生成一個可執行文件(.exe)。

3. launch.json介紹

? ?launch.json文件主要用于運行和調試的配置,具有程序啟動調試功能。launch.json文件會啟用tasks.json的任務,并能實現調試功能。

  1. 單擊左側欄運行和調試圖標,再點擊創建launch.json文件選項,會在右側出現選擇調試器菜單。接著單擊C++(GDB/LLDB),這里的GDB、LLDB是可以作為C/C++的調試器(debugger)。具體實現過程如下圖4所示。
    在這里插入圖片描述
圖4 launch.json文件生成過程
  1. 執行完步驟1,會在工作區code中的.vscode文件夾里面生成一個launch.json配置文件。這里的launch.json文件是首次配置,默認為空,如下圖5所示。
    在這里插入圖片描述
圖5 launch.json文件中的內容
  1. 在configurations的中括號里進行配置launch.json文件,配置的內容如下。
{"configurations": [{"name": "C/C++: gcc.exe 生成和調試活動文件","type": "cppdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "d:\\AppInstall\\GCCAPP\\mingw64\\bin",// 有時候 "cwd"為: "${fileDirname}"或"${workspaceFolder}""environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "d:\\AppInstall\\GCCAPP\\mingw64\\bin\\gdb.exe","setupCommands": [{"description": "為 gdb 啟用整齊打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "將反匯編風格設置為 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: gcc.exe 生成活動文件"}],"version": "2.0.0"
}

下面對launch.json文件中的參數進行介紹:
(1)“name”:自定義命名運行與調式的名稱,將在左側運行和調試的菜單中顯示名稱,如下圖6所示。
在這里插入圖片描述

圖6 運行與調式的名稱

(2)“type”:配置類型,調試器類型,cppdbg為C/C++的調試類型。
(3)“request”:配置請求類型,可以為launch(啟動)或attach(附加)。
(4)“program”:在windows系統下需要進行調試的可執行文件(.exe文件)及其路徑,應該與tasks.json編譯后輸出的可執行文件(.exe文件)及其路徑一致。
(5)“args”:程序調試時傳遞給程序的命令行參數,一般設為空即可,這里提到的程序實際就上面的.exe文件。
(6)“stopAtEntry”:設為true時程序將暫停在程序入口處,一般設置為false。
(7)“cwd”:當前工作目錄(路徑)。
(8)“environment”:添加到程序的環境變量。
(9)“externalConsole”:true開啟外部控制臺窗口,false會使用vscode內部控制臺窗口。
(10)“MIMode”:指示 MIDebugEngine 要連接到的控制臺調試程序,允許的值為 “gdb”、“lldb”。這里使用gdb進行調試。
(10)“miDebuggerPath”:調試器debugger文件及其路徑,這里是調用gdb調試器的路徑。
(11)“preLaunchTask”:運行和調式前要啟動的tasks任務,也即要啟動的編譯任務,任務名要和tasks.json里面的"label"值對應一致。

4. 直接生成tasks.json、launch.json配置文件的另外一種方式

  1. 點擊右上方的添加調試配置按鈕,接著再點擊"C/C++:gcc.exe生成和調試活動文件",如下圖7所示。
    在這里插入圖片描述
圖7 生成tasks.json、launch.json配置文件的過程
  1. 經過步驟1可以在.vscode文件夾中生成tasks.json、launch.json這兩個配置文件,如下圖8所示。
    在這里插入圖片描述
圖8 .vscode文件夾中的tasks.json、launch.json文件

5. c_cpp_properties.json介紹

?? c_cpp_properties.json文件主要是對編輯環境的配置,是針對IntelliSense(智能感知)引擎的有關配置。intelliSense是各種代碼編輯功能的通用術語,包括:代碼補全、參數信息提示、快速信息描述提示和成員列表提示等,因而,intelliSense也稱為代碼提示(code hinting)。
?? 當我們裝了C/C++編譯器,并在vs code中安裝了具有調試功能的C/C++擴展(Extension)后,會自動產生默認的c_cpp_properties.json配置。上面tasks.json、launch.json文件配置完后,我們就能運行C/C++程序了,此時采用默認的c_cpp_properties.json配置。一般情況下,我們可以不用配置c_cpp_properties.json,按上面步驟配置完tasks.json、launch.json后就可以運行代碼了。但如果我們要指定頭文件(.h文件)、庫的位置,那么就需要配置c_cpp_properties.json、tasks.json文件。
?? 我們可以通過快捷鍵Ctrl+Shift+P打開命令面板,接著輸入關鍵詞C/C++編輯配置 ,之后會彈出C/C++編輯配置(JSON)和C/C++編輯配置(UI)兩種選項,如下圖所示。
在這里插入圖片描述
(1)C/C++編輯配置(JSON)是c_cpp_properties.json文件形式的設置,單擊該選項就會在.vscode文件夾下生成一個c_cpp_properties.json配置文件;
(2)C/C++編輯配置(UI)可以通過一個可視化界面來手動設置,當我們單擊 C/C++編輯配置(UI) 選項時,就會自動在.vscode文件夾下生成一個c_cpp_properties.json配置文件。我們可以C/C++配置 菜單下來制定編譯器路徑,如下圖所示。
在這里插入圖片描述
(3)c_cpp_properties.json配置文件的默認配置如下:

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"cStandard": "c17","cppStandard": "gnu++14","intelliSenseMode": "windows-gcc-x64","compilerPath": "D:/AppInstall/GCCAPP/mingw64/bin/gcc.exe"}],"version": 4
}

文件中的參數介紹如下:

  • “name”:名稱。操作系統根據這個名稱識別對應的屬性配置,windows系統:Win32;Linux系統:Linux;macOS系統:Mac。
  • “includePath”:頭文件路徑。以便IntelliSense(智能感知)引擎的搜索。
  • "${workspaceFolder}/**":當前項目所在根目錄并遞歸搜索子目錄,也就是當前工作區文件夾的路徑(例如:D:\code),而且還會遞歸查找其所有的子目錄。
  • “defines”:IntelliSense(智能感知)引擎在分析文件時要使用的預處理器定義列表。
  • “cStandard”:用于IntelliSense(智能感知)引擎的c標準(版本)。
  • “cppStandard”:用于IntelliSense(智能感知)引擎的c++標準(版本)。
  • “intelliSenseMode”:IntelliSense(智能感知)的模式。
  • “compilerPath”:根據該路徑查詢編譯器(gcc.exe、g++.exe),以便啟用更加準確的IntelliSense(智能感知)。這里并不是調用編譯器,真正啟用編譯器編譯的是在tasks.json文件里

6. 運行多個C/C++文件

?? 按照上面步驟配置好tasks.json、launch.json文件后,我們就可以編譯運行C/C++程序,只不過此時只能編譯運行一個C/C++源文件。如果我們編寫的主程序需要調用其它文件的函數,也就是要編譯多個文件時,task.json文件中的"${file}"是不能實現多文件編譯的,因為"${file}"表示當前打開的C/C++源文件,也就是說只能編譯一個C/C++源文件。那這時候該咋辦啊,我好怕怕啊,救命啊。不要慌不要急,下面給出解決方案。
??我們以圖1 code項目的組織結構為基礎,在工作區code文件夾的day1文件夾下創建hello.c、func.c、sum.h這個文件,如下圖9所示。
在這里插入圖片描述
其中hello.c文件為

#include <stdio.h>
#include "sum.h"
int main()
{printf("hello C");int s = sum(1,2);printf("sum = %d", s);return 0;
}

func.c文件為

int sum(int a, int b){return a+b;
}

sum.h文件為

int sum(int a, int b);

??解決方案的中心思想是:你在編譯的時候用到幾個C/C++源文件,那么在tasks.json配置文件中就添加相應數量的C/C++源文件路徑C/C++源文件路徑添加的位置在tasks.json文件下"args"參數中,即:

"args": [	     ..."-g",//在"-g"和"-o"之間添加編譯時用到的C/C++源文件路徑"-o",...]

(1)第一種方法:將"${file}"、"${fileDirname}\\func.c"添加進去。"${file}"表示當前打開的活動文件,也就是hello.c文件路徑;"${fileDirname}\\func.c"表示func.c文件路徑。
(2)第二種方法:將"${file}"、"${workspaceFolder}\\day1\\func.c"添加進去;"${workspaceFolder}\\day1\\func.c"表示func.c文件路徑。
(3)第三種方法:前兩種方法需要手動地將每個源文件路徑添加進去,太麻煩了。所以可以將"${fileDirname}\\*.c"添加進去,此命令相當于把所有后綴名為.c的文件路徑都添加進去。
(4)如果是C++源文件,將后綴名".c"換成".cpp"即可。
(5)tasks.json配置文件中的內容更改如下,launch.json保持不變。

{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活動文件","command": "d:\\AppInstall\\GCCAPP\\mingw64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g",// 第一種方法:"${file}","${fileDirname}\\func.c",// 第二種方法:// "${file}",// "${workspaceFolder}\\day1\\func.c",// 第三種方法:// "${fileDirname}\\*.c","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "d:\\AppInstall\\GCCAPP\\mingw64\\bin"// "cwd": "${fileDirname}":有時候"cwd"的值為:"${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "調試器生成的任務。"}],"version": "2.0.0"
}

7. 命令行方式編譯C++

(1)編譯單個C++文件:g++ -g "C++源文件" -o 編譯生成的可執行文件,例如:g++ -g .\main.cpp -o main.exe
(2)編譯多個C++文件:g++ -g "C++源文件1" "C++源文件2" ... "C++源文件n" -o 編譯生成的可執行文件,例如:g++ -g a.cpp b.cpp c.cpp -o multi_file.exe
(3)上面生成的可執行文件后綴名(.exe)可以省略。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72690.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72690.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72690.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ORB-SLAM2源碼學習(六):相機跟蹤(局部地圖跟蹤和關鍵幀創建)

目錄 1.局部地圖跟蹤 1.1 更新局部關鍵幀UpdateLocalKeyFrames 1.2 更新局部地圖點&#xff08;來自局部關鍵幀&#xff09;UpdateLocalPoints() 1.3 投影匹配 2. 對比四種跟蹤方式以及使用的投影匹配 3.關鍵幀創建 3.1 判斷是否需要創建新關鍵幀: NeedNewKeyFrame() 3…

PostgreSQL時間計算大全:從時間差到時區轉換(保姆級教程)

一、時間計算的三大核心場景 當你遇到這些需求時&#xff0c;本文就是你的救星&#x1f31f;&#xff1a; 倒計時功能&#xff1a;計算活動剩余天數 用戶行為分析&#xff1a;統計操作間隔時間 跨國系統&#xff1a;多時區時間統一管理 報表生成&#xff1a;自動計算同比/環…

Qt6.8.2創建WebAssmebly項目使用FFmpeg資源

Qt6新出了WebAssmebly功能&#xff0c;可以將C寫的軟件到瀏覽器中運行&#xff0c;最近一段時間正在研究這方便內容&#xff0c;普通的控件響應都能實現&#xff0c;今天主要為大家分享如何將FFmpeg中的功能應用到瀏覽器中。 開發環境&#xff1a;window11&#xff0c;Qt6.8.2…

DeepSeek V3 源碼:從入門到放棄!

從入門到放棄 花了幾天時間&#xff0c;看懂了DeepSeek V3 源碼的邏輯。源碼的邏輯是不難的&#xff0c;但為什么模型結構需要這樣設計&#xff0c;為什么參數需要這樣設置呢&#xff1f;知其然&#xff0c;但不知其所以然。除了模型結構以外&#xff0c;模型的訓練數據、訓練…

【leetcode hot 100 240】搜索二維矩陣Ⅱ

解法一&#xff1a;直接查找 class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int i0; i<matrix.length; i){for(int j0; j<matrix[0].length; j){if(matrix[i][j]>target){break;}if(matrix[i][j]target){return true;}}}return fal…

UE4 組件 (對話組件)

制作一個可以生成對話氣泡&#xff0c;顯示對話臺詞的簡單組件。這個組件要的變量&#xff1a;臺詞&#xff08;外部傳入&#xff09;。功能&#xff1a;開始對話&#xff08;生成氣泡UI&#xff09; &#xff0c;結束對話。 一、對話組件創建 二、開始對話事件 1、注意這里獲…

自動化同步多服務器數據庫表結構

當項目每次進行版本升級的時候&#xff0c;如果在這次迭代中涉及表結構變更&#xff0c;需要將不同的生產環境下&#xff0c;都需要同步表結構的DDL語句&#xff0c;比較麻煩&#xff0c;而且還有可能忘記同步腳本&#xff0c;導致生產環境報錯.... 該方案采用SpringBootMybat…

DeepSeek安全:AI網絡安全評估與防護策略

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取網絡安全全套資料&#xff0c;資料在手&#xff0c;漲薪更快 本文基于現有的公開資料&#xff0c;從企業資深網絡安全專家的視角&#xff0c;系統梳理DeepSeek技術在網絡安全領域的潛在貢獻與核心風險&#xff0c;并結合中國…

【論文筆記】Attentive Eraser

標題&#xff1a;Attentive Eraser: Unleashing Diffusion Model’s Object Removal Potential via Self-Attention Redirection Guidance Source&#xff1a;https://arxiv.org/pdf/2412.12974 收錄&#xff1a;AAAI 25 作者單位&#xff1a;浙工商&#xff0c;字節&#…

【powerjob】 powerjobserver注冊服務IP錯誤

1、問題&#xff1a;powerjobserver 4.3.6 的服務器上有多個網卡對應多個ip,示例 eth0 :IP1 &#xff0c;docker0:IP2 和worker 進行通信時 正確的應該時IP1 但是注冊顯示獲取的確實IP2,導致 worker 通過ip2和server通信&#xff0c;網絡不通&#xff0c;注冊不上 2、解決方案 …

視頻錄像機視頻通道是指什么

視頻錄像機的視頻通道是指攝像機在監控矩陣或硬盤錄像機設備上的視頻輸入的物理位置。 與攝像頭數量關系&#xff1a;在視頻監控系統中&#xff0c;有多少個攝像頭就需要多少路視頻通道&#xff0c;通道數量決定了視頻錄像機可接入攝像頭的數量&#xff0c;一般硬盤錄像機有4路…

面試150,數組 / 字符串

27. 移除元素 class Solution:def removeElement(self, nums: List[int], val: int) -> int:# 把不等于 val 的值移動到前面n len(nums)left 0for right in range(n):if nums[right] ! val:nums[left] nums[right]left 1return left26. 刪除有序數組中的重復項 只保留 1…

【江科大STM32】TIM輸入捕獲模式PWMI模式測頻率

一、輸入捕獲測頻率 接線圖&#xff1a; 測信號的輸入引腳為PA6&#xff0c;信號從PA6進來&#xff0c;待測的PWM信號也是STM32自己生成的&#xff0c;輸出引腳是PA0&#xff0c;所以接線這里直接用一根線將PA0引到PA6就可以了。 如果有信號發生器的話&#xff0c;也可以設置成…

湖倉一體化及冷、熱、實時三級存儲

一、湖倉一體化&#xff08;Lakehouse&#xff09; 湖倉一體化&#xff08;Lakehouse&#xff09;是數據湖&#xff08;Data Lake&#xff09;與數據倉庫&#xff08;Data Warehouse&#xff09;的結合&#xff0c;旨在解決傳統數據架構中數據孤島、存儲冗余、計算性能不足等問…

go切片定義和初始化

1.簡介 切片是數組的一個引用&#xff0c;因此切片是引用類型&#xff0c;在進行傳遞時&#xff0c;遵守引用傳遞的機制。切片的使用和數組類似&#xff0c;遍歷切片、訪問切片的元素和切片的長度都一樣。。切片的長度是可以變化的&#xff0c;因此切片是一個可以動態變化的數…

游戲引擎學習第138天

倉庫:https://gitee.com/mrxiao_com/2d_game_3 資產&#xff1a;game_hero_test_assets_003.zip 發布 我們的目標是展示游戲運行時的完整過程&#xff0c;從像素渲染到不使用GPU的方式&#xff0c;我們自己編寫了渲染器并完成了所有的工作。今天我們開始了一些新的內容&#…

畢業項目推薦:基于yolov8/yolov5/yolo11的暴力行為檢測識別系統(python+卷積神經網絡)

文章目錄 概要一、整體資源介紹技術要點功能展示&#xff1a;功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出&#xff08;xls格式&#xff09;功能6 支持切換檢測到的目標查看 二、數據集三、算法介紹1. YO…

docker中kibana啟動后,通過瀏覽器訪問,出現server is not ready yet

問題&#xff1a;當我在瀏覽器訪問kibana時&#xff0c;瀏覽器給我報了server is not ready yet. 在網上試了很多方法&#xff0c;都未能解決&#xff0c;下面是我的方法&#xff1a; 查看kibana日志&#xff1a; docker logs -f kibana從控制臺打印的日志可以發現&#xff…

在 Docker 中,無法直接將外部多個端口映射到容器內部的同一個端口

Docker 的端口映射是一對一的&#xff0c;即一個外部端口只能映射到容器內部的一個端口。 1. 為什么不能多對一映射&#xff1f; 端口沖突&#xff1a; 如果外部多個端口映射到容器內部的同一個端口&#xff0c;Docker 無法區分外部請求應該轉發到哪個內部端口&#xff0c;會…

游戲引擎學習第120天

倉庫:https://gitee.com/mrxiao_com/2d_game_3 上次回顧&#xff1a;周期計數代碼 我們正在進行一個項目的代碼優化工作&#xff0c;目標是提高性能。當前正在優化某個特定的代碼片段&#xff0c;已經將其執行周期減少到48個周期。為了實現這一目標&#xff0c;我們設計了一個…