VSCode配置C/C++环境

VSCode配置C/C++环境

推荐参考:vscode配置C/C++环境(超详细保姆级教学)_vscode c+±CSDN博客


C/C++编译原理

C 和 C++ 编译运行的过程通常包括以下几个主要步骤:

  1. 预处理(Preprocessing)
    • 编译器首先会处理源代码中的预处理指令(如 #include#define 等)。
    • 包括导入头文件、宏替换、条件编译等操作。
    • 生成一个经过预处理的源代码文件(通常以 .i.ii 为扩展名)。
  2. 编译(Compilation)
    • 将预处理后的源代码文件编译成汇编语言代码
    • 检查语法错误、类型检查等,并生成汇编代码文件(通常以 .s 为扩展名)。
  3. 汇编(Assembly)
    • 将汇编代码文件转换成机器代码(即目标文件)。
    • 生成目标文件(通常以 .o.obj 为扩展名)。
  4. 链接(Linking)
    • 将一个或多个目标文件与所需的库文件链接在一起,生成最终的可执行文件。
    • 解决符号引用问题,将所有相关的代码和数据合并到一个可执行文件中。
    • 生成可执行文件(通常以 .exe 或无扩展名在类 Unix 系统上)。

示例命令

以 C++ 为例,使用 g++ 工具链编译和运行一个 C++ 程序的过程如下:

  1. 编写源代码文件

    // main.cpp
    #include 
    
    int main() {
        std::cout << "Hello, World!" << std::endl;
        return 0;
    }
    
  2. 预处理

    g++ -E main.cpp -o main.i
    
  3. 编译

    g++ -S main.i -o main.s
    
  4. 汇编

    g++ -c main.s -o main.o
    
  5. 链接并生成可执行文件

    g++ main.o -o hello
    
  6. 运行可执行文件

    ./hello
    

在实际开发中,通常使用简化的命令一步完成编译和链接

g++ main.cpp -o hello

这个命令会直接生成可执行文件 hello,然后你可以通过 ./hello 运行它。


Java编译原理

Java 文件的编译过程与 C/C++ 有所不同,主要是因为 Java 采用了独特的“编译一次,到处运行”的模式,即 Java 源代码首先被编译成字节码文件.class 文件),然后由 Java 虚拟机(JVM)在不同的平台上解释执行。Java 文件的编译和运行过程可以分为几个关键步骤,从编写源代码到最终运行程序。下面是详细的步骤:

1. 编写源代码

首先,编写 Java 源代码文件,通常.java 为扩展名。例如,创建一个名为 HelloWorld.java 的文件,内容如下:

// HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

2. 编译源代码

使用 JDK(Java Development Kit)中的 javac 编译器将源代码文件编译成字节码文件.class 文件)。

javac HelloWorld.java

编译过程主要包括以下几个步骤:

  • 词法分析javac 编译器首先会对源代码进行词法分析,将代码分解成一个个的词法单元(tokens)。
  • 语法分析:检查这些词法单元是否符合 Java 语言的语法规则
  • 语义分析:检查语义的正确性,包括类型检查、变量作用域等。
  • 生成中间代码生成一种中间代码形式,通常是基于栈的指令集。
  • 代码优化:对中间代码进行优化,以提高执行效率。
  • 生成字节码:最终生成字节码文件.class),这些字节码是 Java 虚拟机(JVM)的指令集

3. 运行程序

使用 java 命令运行编译后的字节码文件。

java HelloWorld

运行过程主要包括以下几个步骤:

  • 类加载:JVM 加载 .class 文件中的类信息
  • 字节码验证:验证字节码的正确性和安全性
  • 解释执行JVM 解释执行字节码,将其转换为机器码并运行。
  • 即时编译(JIT):对于频繁执行的部分代码,JVM 会进行即时编译,将其转换为本地机器码,以提高执行效率。

整体流程示例

  1. 编写 Java 源代码

    // HelloWorld.java
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello, World!");
        }
    }
    
  2. 编译源代码

    javac HelloWorld.java
    

    编译成功后会生成一个 .class 文件:

    HelloWorld.class
    
  3. 运行程序

    java HelloWorld
    

    控制台输出:

    Hello, World!
    

注意事项

  • 在编译时,如果源代码中有语法错误或类型错误,javac 编译器会报错,需要先修正这些错误才能成功编译
  • 在运行时,如果类名错误或 .class 文件不存在,JVM 会报 ClassNotFoundException 或其他相关错误。

通过这种编译和解释相结合的方式,Java 实现了跨平台的特性,使得同样的字节码文件可以在不同的操作系统上运行。


基础步骤

  1. 下载VSCode(源代码编辑器)

    VSCode是什么?

    VSCode(Visual Studio Code)是一款由微软开发的开源源代码编辑器,广泛应用于软件开发,特别是在 web 开发和多种编程语言的开发中。以下是 VSCode 的一些主要特点和功能:

    **主要特点 **

    1. 轻量级和快速:VSCode 的启动速度快,占用资源少,适合快速编辑和大型项目。
    2. 跨平台:支持 Windows、macOS 和 Linux 操作系统,使得开发者可以在多种环境中使用。
    3. 丰富的插件生态:VSCode 拥有强大的扩展市场,用户可以根据需求安装各种插件,支持几乎所有编程语言和工具。常用的插件包括:
      • Prettier(代码格式化)
      • ESLint(JavaScript 代码检查)
      • Python(Python 支持)
      • C/C++(C/C++ 开发支持)
    4. 智能代码补全:内置代码补全和 IntelliSense 功能,可以根据上下文提供智能建议,提升编码效率。
    5. 版本控制集成:内置支持 Git 版本控制,用户可以直接在编辑器中执行版本控制操作,如提交、拉取和合并等。
    6. 调试功能:提供强大的调试工具,支持多种语言的调试,用户可以设置断点、查看变量值和调用堆栈等。
    7. 集成终端:内置终端允许用户在编辑器中直接进行命令行操作,无需切换到其他窗口。
    8. 用户自定义:支持自定义主题、快捷键和界面布局,以适应个人的工作习惯。
    9. 实时共享:通过 Live Share 功能,开发者可以实时共享工作区,协作开发,提高团队开发效率。

    由于其易用性、强大的功能和灵活的扩展性,VSCode 成为许多开发者的首选代码编辑器,无论是前端开发、后端开发,还是移动应用开发,VSCode 都能提供良好的支持。

  2. 下载g++(编译器)

    g++是什么?

    g++ 是 GNU 编译器集合(GNU Compiler Collection,简称 GCC)中的一个编译器,它专门用于编译 C++ 语言的程序。g++ 的主要功能是将用 C++ 编写的源代码(通常是以 .cpp 为扩展名的文件)编译成可执行文件

    g++ 支持 C++ 的多个版本,包括 C++98、C++03、C++11、C++14、C++17、C++20 等。它生成的可执行文件可以在许多操作系统(如 Linux、macOS 和 Windows)上运行。

    使用 g++ 编译程序的基本命令格式如下:

    g++ -o output_file source_file.cpp
    

    其中,output_file 是你希望生成的可执行文件的名称,source_file.cpp 是你的 C++ 源代码文件。运行这个命令后,g++ 会将源代码编译并生成指定的可执行文件。

  3. 安装VSCode插件(提升开发效率)

  4. 配置调试功能(配置)

    .vsocde文件夹有什么用?

    在为 Visual Studio Code(VSCode)配置 C/C++ 开发环境时,.vscode 文件夹是一个非常重要的目录。它用于存储特定于项目的配置文件,这些配置文件定义了如何构建、调试和运行 C/C++ 代码。下面是 .vscode 文件夹中常见文件的说明及其用途:

    1. settings.json

      • 用途:用于配置此项目的 VSCode 设置。

      • 功能

        • 可以用来指定与 C/C++ 相关的设置,比如包含路径、编译器路径等。

        • 示例内容:

          {
            "files.associations": {
              "*.py": "python",
              "iostream": "cpp",
              "*.tcc": "cpp",
              "string": "cpp",
              "unordered_map": "cpp",
              "vector": "cpp",
              "ostream": "cpp",
              "new": "cpp",
              "typeinfo": "cpp",
              "deque": "cpp",
              "initializer_list": "cpp",
              "iosfwd": "cpp",
              "fstream": "cpp",
              "sstream": "cpp",
              "map": "c",
              "stdio.h": "c",
              "algorithm": "cpp",
              "atomic": "cpp",
              "bit": "cpp",
              "cctype": "cpp",
              "clocale": "cpp",
              "cmath": "cpp",
              "compare": "cpp",
              "concepts": "cpp",
              "cstddef": "cpp",
              "cstdint": "cpp",
              "cstdio": "cpp",
              "cstdlib": "cpp",
              "cstring": "cpp",
              "ctime": "cpp",
              "cwchar": "cpp",
              "exception": "cpp",
              "ios": "cpp",
              "istream": "cpp",
              "iterator": "cpp",
              "limits": "cpp",
              "memory": "cpp",
              "random": "cpp",
              "set": "cpp",
              "stack": "cpp",
              "stdexcept": "cpp",
              "streambuf": "cpp",
              "system_error": "cpp",
              "tuple": "cpp",
              "type_traits": "cpp",
              "utility": "cpp",
              "xfacet": "cpp",
              "xiosbase": "cpp",
              "xlocale": "cpp",
              "xlocinfo": "cpp",
              "xlocnum": "cpp",
              "xmemory": "cpp",
              "xstddef": "cpp",
              "xstring": "cpp",
              "xtr1common": "cpp",
              "xtree": "cpp",
              "xutility": "cpp",
              "stdlib.h": "c",
              "string.h": "c"
            },
            "editor.suggest.snippetsPreventQuickSuggestions": false,
            "aiXcoder.showTrayIcon": true
          }
          
    2. tasks.json

      • 用途:定义自定义任务,如编译 C/C++ 代码。

      • 功能

        • 可以定义一系列任务(如 buildclean),以运行特定的命令

        • VSCode 通过这些任务支持多种构建工具

        • 示例内容(一个简单的编译任务):

          {
            "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
                }
              }
            ]
          }
          
    3. launch.json

      • 用途配置调试器的设置

      • 功能

        • 定义如何启动调试会话,包括调试器类型(如 GDB 或 LLDB)、可执行文件路径、程序参数等。

        • 示例内容:

          {
            "version": "0.2.0",
            "configurations": [
              {
                "name": "(gdb) Launch", 
                "type": "cppdbg", 
                "request": "launch", 
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", 
                "args": [], 
                "stopAtEntry": false,
                "cwd": "${workspaceRoot}",
                "environment": [],
                "externalConsole": true, 
                "MIMode": "gdb",
                "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
                "preLaunchTask": "g++",
                "setupCommands": [
                  {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                  }
                ]
              }
            ]
          }
          
    4. c_cpp_properties.json

      • 用途:配置 C/C++ 扩展的 IntelliSense 设置。

      • 功能

        • 用于定义编译器路径、包含路径等 IntelliSense 所需的配置信息,从而提供代码补全和错误提示功能。

        • 示例内容:

          {
            "configurations": [
              {
                "name": "Win64",
                "includePath": ["${workspaceFolder}/**"],
                "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
                "windowsSdkVersion": "10.0.18362.0",
                "compilerPath": "C:/MinGW/bin/g++.exe",
                "cStandard": "c17",
                "cppStandard": "c++17",
                "intelliSenseMode": "gcc-x64"
              }
            ],
            "version": 4
          }
          

    总结

    • .vscode 文件夹中的这些配置文件为每个项目提供了特定的设置,使得 VSCode 能够根据用户需求来构建和调试 C/C++ 程序
    • 通过合理配置这些文件,开发者可以极大提高开发效率,享受更流畅的编辑和编译体验
    • 这些配置不只是局限于 C/C++ 开发,也可以用于其他语言和工具,使得 .vscode 文件夹在任何项目中都显得十分重要。

你可能感兴趣的:(基本知识储备,vscode,c语言,c++)