【C++20】module特性测试

GCC11.1对C++20支持基本完成,本文将使用GCC11.1构建g++11.1测试C++20 module特性。

GCC11.1 编译方法参看“【C++20】GCC11构建经验”,GCC11.1构建时间大概比GCC10.1长30分钟,达到1小时40分钟。

 

测试modules特性代码:https://zhuanlan.zhihu.com/p/350136757

测试代码1:

// A.cc
export module A;
export int foo();
// A.cpp
module;
#include <iostream>
module A;
int foo()
{
    std::cout << 1 << std::endl;
    return 1;
}
// main.cpp
import A;

int main()
{
    foo();
}

 

$ g++11.1 -fmodules-ts -std=c++20 A.cc A.cpp main.cpp -o main

 

测试代码2:

// 1.cc 
export module A;       // 对外暴露一个叫 A 的 module
export import :Foo;    // 对外暴露 A:Foo 这个模块
export int baz();      // 对外暴露 int baz();


  
// 2.cc
export module A:Foo;     // 对外暴露 A:Foo 这个模块
import :Internals;       // 引入 A:Internals 这个模块

// 给出函数 int foo() 的实现, 并且对外暴露
export int foo() { return 2 * (bar() + 1); }



// 3.cc
module A:Internals;     // 表明我就是 A:Internals 这个模块
int bar();              // 表明本模块里面有一个 int bar() 函数.


// 4.cc
module;                // 表明现在我是 global module fragment
#include <iostream>    
module A;              // 表明现在我是模块 A 的 module implementation unit
import :Internals;     // 引入 A:Internals 这个模块

// 给出了 A:Internals 之中 int bar() 的定义 (具有 module linkage)
int bar() { return baz() - 10; }

// 给出了 1.cc 中 int baz() 的定义 (具有 external linkage)
int baz()
{
    std::cout << 30;
    return 30;
}


// main.cpp
import A;

int main(){
    foo();
}

$ g++11.1 -fmodules-ts -std=c++20 3.cpp 2.cpp 1.cpp 4.cpp main.cpp -o main

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值