C++23中的import开发实践

一、模块的引入

在c++20中就引入import这个模块应用机制了。但限于编译器和环境的滞后性,短时间内不大可能广泛的应用起来。但这不代表着开发者可以忽视它,一个新技术的出现,不管最终的结果如何。都需要在实践中进行应用并反馈结果。那么在实际编程中如何使用这种机制呢,下面就以一个最简单的程序来给大家演示一下,让大家有一个逐步接受的过程。

开发的环境使用了ubuntu25.10,程序中默认的gcc的版本是gcc15.2,编译默认的C++标准为c++20。如果缺少相关的库或者编译环境限制,请根据提示自行安装即可,此处不再赘述。

二、一个最简单的程序

照老样子,先搞一个最简单的程序来看:

c 复制代码
import std;
int main(){
	std::println("this is first test!");
	std::cout<<"test"<<std::endl;
	return 0;
}

这个程序非常简单,但是,如果使用传统的编译方法如下面的方式:

复制代码
g++ -o test importDemo.cpp

则会产生下面的错误:

复制代码
error:'import' does not name a type

这说明用传统的编译的方法在目前是无法满足使用模块编译的情况的。

三、编译和处理

那么如何才能正确编译上面的代码呢?可以试着使用相关的编译命令:

复制代码
g++ -o test importDemo.cpp -std=c++23 -fmodules

但是会报下面的问题:

复制代码
g++ -o test importDemo.cpp -std=c++23 -fmodules
In module imported at importDemo.cpp:1:1:
std: error: failed to read compiled module: 没有那个文件或目录
std: note: compiled module file is 'gcm.cache/std.gcm'
std: note: imports must be built before being imported
std: fatal error: returning to the gate for a mechanical issue
compilation terminated.

通过上面编译结果分析,发现是少了文件"gcm.cache/std.gcm",而这个文件是怎么才能得到呢?经过查找资料发现,需要提前编译一下:

复制代码
g++ -std=c++23 -fmodules-ts -fsearch-include-path -c bits/std.cc

这个命令执行完成后,可以在当前目录中发现上面提到的文件以及一个std.o的文件。此时再使用"g++ -o test importDemo.cpp -std=c++23 -fmodules"则可以正确的编译程序了。然后执行编译后的程序则可以打印程序中的内容

四、总结

通过上面的一个最简单的基础入门的编译应用,大家可以很清楚的明白如何引入模块后的编译。通过这一简单的示例,大家就可以踏进C++模块开发的大门,开始自由的按照自己的意愿不断的学习和提升自己的能力。

相关推荐
Bender_ydc14 天前
一个基于现代 C++23 Modules 的传统文化算法库,使用纯模块化设计实现(包含大六壬、六爻、紫薇斗数、八字、奇门遁甲)
算法·c++23
fpcc22 天前
c++23中的print和println
c++·c++23
charlie1145141912 个月前
精读C++设计模式20 —— 结构型设计模式:桥接模式
开发语言·c++·学习·设计模式·桥接模式·c++23·概论
疯狂的Alex2 个月前
半精度浮点在AI推理中的应用:C++23新类型与性能测试
人工智能·c++23
疯狂的Alex2 个月前
C++23特性全解析:从编译器支持矩阵到多维数组性能优化实战
rpc·矩阵·c++23
雪域迷影4 个月前
C++23中的std::expected:异常处理
开发语言·c++·c++23
十年编程老舅5 个月前
跨越十年的C++演进:C++20新特性全解析
c++·c++11·c++20·c++14·c++23·c++17·c++新特性
oioihoii6 个月前
C++23 已移除特性解析
java·jvm·c++23
oioihoii6 个月前
C++23 已弃用特性
c++23