首页 > 编程语言 >vscode运行C++20,支持模块的实现。

vscode运行C++20,支持模块的实现。

时间:2024-06-10 18:21:44浏览次数:14  
标签:opt 20 vscode clang ++ C++ file

C++是一个古老的语言,为了跟上时代,一直进行缓慢的演化。在2011年,C++11的发布让这个语言进入21世纪,可以现代化的使用。它有着lambda表达式,auto类型推断。此外使用容器替代低级语言结构,智能指针或其他RAII技术加强了安全编程。我们在编写C++代码应多使用现代化的函数。C++20让编程更加现代化,优雅简洁。一个 Module 是一个独立的翻译单元,包含一个到多个 module interface file(即模块接口文件),包含 0 个到多个 module implementation file(即模块实现文件),使用 Import 关键字即可导入一个模块。是下面是代码示例,来自《C++20实践入门》,编译环境是Mac。

// A complete C++ program
import <iostream>;
// # include <iostream>

int main()
{
int answer {42}; // Defines answer with value 42

std::cout << "The answer to life, the universe, and everything is "
		<< answer
		<< std::endl;

return 0;
}

CMake配置:

cmake_minimum_required(VERSION 3.18)
project(MyProject LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 填写自己的clang地址,或者其他编译器的地址。
# Specify the path to Clang
set(CMAKE_CXX_COMPILER "/opt/homebrew/opt/llvm/bin/clang++")

# Enable module support
add_compile_options(-fmodules)

# 有自建库时使用
# Add the mathlib library
# add_library(mathlib STATIC mathlib.cpp)

# Add the main executable
add_executable(Ex1_01 Ex1_01.cpp)

# 有自建库时使用
# Link the mathlib library with the main executable
# target_link_libraries(main PRIVATE mathlib)

在这个程序中,有注释、输入输出函数的引用,命名空间,结束语句。
在所有程序中,值都可以看作地址之间的映射关系,所以我们这些语句背后都是对内存地址的跳转。使用CMake编译这个程序,进入C++20的世界。

cmake --build .
./Ex1_01

为了能够在vscode中自动编译,而不每次手动修改cmake的内容。
可以使用传统的launch和tasks
launch配置:

{
    "version": "2.0.0",
    "configurations": [
        {
            "name": "C/C++: clang++ build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "C/C++: clang++ build active file",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

task:

{
    "version": "2.0.0",
    "configurations": [
        {
            "name": "C/C++: clang++ build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "C/C++: clang++ build active file",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

build时选择适配C++20的编译器

此外,code runner的自动化程度更高,详细配置就不在这里描述,只分享下我的setting.json中的配置:

"code-runner.executorMap": {
"cpp": "cd $dir && /opt/homebrew/opt/llvm/bin/clang++ -std=c++20 -fmodules -stdlib=libc++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
}

这里的/opt/homebrew/opt/llvm/bin/clang++ -std=c++20是我的编译器地址,和CMake中设置一样。在复杂的依赖关系中,还是需要使用CMake去定义关系。而简单的编程,一个文件就能搞定,设置自动化工具肯定更加高效。

关于过程化编程和面向对象编程
过程化编程自顶向下设计,将过程分为子过程。就如我们要判断一个回文质数,先写一个函数判断质数,再写一个函数判断回文。最后主程序中执行总判断。所以现在过程化编程在刷题中锻炼程序员的逻辑思维。
面向对象编程有3大特性,封装,继承,多态。对数据进行处理,让它可以模块化的处理。系统的开发都会选用面向对象编程,是工作时使用。

标签:opt,20,vscode,clang,++,C++,file
From: https://www.cnblogs.com/fischer/p/18240861

相关文章

  • 2024年的高考人工智能,你能把握住么?还能卷么?
    背景:随着国家针对人工智能出台的政策越来越多了,很多国企也纷纷进入了该行业进行了布局,就连2024这次的高考的语文作文都是人工智能。高考作文:新课标I卷阅读下面的材料,根据要求写作。(60分)随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的......
  • 2024-06-05 拷贝、函数、装饰器、迭代生成器
    一、浅拷贝lists=[1,2,[6]]内存空间不同,浅拷贝内容不变 new_lists=copy(lists)lists.append(7)print(lists,new_lists)//[1,2,[6],7][1,2,[6]]改变列表中内容,内存空间相同,数值改变new_lists=copy(lists)lists[-1].append(7)print(lists,new_lists)//[......
  • 2024-06-06 闭包、常用函、类和实例
    一、闭包1.定义闭包是一个函数内部定义的内部函数,且可以访问外部函数的变量。常用与数据隐藏和信息封装。defhello():username='小小奇'defvoi()://内部函数变量returnusernamereturnvoi2.数据隐藏将变量封装在内部函数......
  • 20种昆虫图像分类数据集
    20种昆虫图像分类数据集数据集:链接:https://pan.baidu.com/s/1M_syZSjpc_08A3Ip5dKzBA?pwd=yhzw提取码:yhzw数据集信息介绍:文件夹天牛中的图片数量:516文件夹棉铃虫中的图片数量:250文件夹独角仙中的图片数量:480文件夹瓢虫中的图片数量:470文件夹......
  • 牛客周赛 Round 46 题解 C++
    目录 A 乐奈吃冰B 素世喝茶C 爱音开灯D 小灯做题E 立希喂猫F 祥子拆团 A 乐奈吃冰#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<vector>#include<unordered_map>......
  • 2024最新最全【大模型技术AGI】入门到精通,看完这一篇就够了!
    学习大模型(例如GPT-3、BERT等)需要一定的数学和编程基础,以及对人工智能、机器学习、自然语言处理等领域的了解。以下是一个学习大模型的基本路线:基础知识储备:数学基础:掌握线性代数、概率论与数理统计、微积分等数学知识。编程基础:熟悉至少一种编程语言,如Python,因为大多......
  • 2024 年 Web 安全最详细学习路线指南,从入门到入职(含书籍、工具包)【建议收藏】
    第一个方向:安全研发你可以把网络安全理解成电商行业、教育行业等其他行业一样,每个行业都有自己的软件研发,网络安全作为一个行业也不例外,不同的是这个行业的研发就是开发与网络安全业务相关的软件。既然如此,那其他行业通用的岗位在安全行业也是存在的,前端、后端、大数据分......
  • NOIP2024模拟11:忠于自我
    NOIP2024模拟11:忠于自我T1一句话题意:有若干个容量为\(L\)的包,从左往右装物品,当前包还能装则装,否则必须重开一个包装进去,对于\(\foralli\in[1,n]\),问想要以此装入第\(i\simn\)个物品需要开多少个包?结论题:倒着装和正着装所需要的包数是一样的.感性理解:在"......
  • NOIP2024模拟12:孤帆远影
    NOIP2024模拟12:孤帆远影听了机房同学的讨论,于是T1死磕冒泡和逆序对做法。最后只得了40pts。思想对了,但不是自己的做法。还是要坚持自己想,坚持自己可以想出来,不要被任何人带偏。T1一句话题意:将一个已知序列通过不断“交换相邻位置”的操作调整成不严格单峰状态,问最小的操......
  • C++缺省参数、缺省参数的概念、缺省参数的分类、函数重载、函数重载的概念、C++支持函
    文章目录前言一、缺省参数1.缺省参数的概念2.缺省参数的分类二、函数重载1.函数重载的概念2.C++支持函数重载的原理三、引用1.引用的概念2.引用的特性3.常引用4.引用的使用场景5.传值和传引用效率比较6.引用和指针的区别总结前言C++缺省参数、缺省参数......