4.extern keyword.rs

/*
在rust中有两种用法
1.导入外部的包  extern crate mylib 。在最新的rust2018中已经可以不在声明
2.extern "C" 目测和C语言完全一致

每一个crate就是一个根模块。如:exp, lip, lip1, lip2, lip3。
独立的一个文件就是一个mod,文件名就是mod名;但是main.rs, lib.rs, mod.rs除外,mod.rs的模块名就是其所在目录的名字; 而main.rs, lib.rs 的目录结构,如:exp/src/main.rs或 lip/src/lib.rs ;两者的mod名分别是exp和lip。

在 tests/*.rs 的每个文件是一个集成测试。当你运行 cargo test,Cargo 将编译每个文件作为一个单独的箱子。箱可以通过使用 extern crate <library-name> 链接 (导入) 您的库,就像其他导入项一样。

一个文件夹直接包含mod.rs ,如: rust_mod_study/lip2/src/worker/mod.rs ;则 worker就是模块名; 并且mod.rs为此模块的入口文件,此文件夹内的其他子模块都要在mod.rs中 pub mod 模块名,声明后,外部方可看到。

文件和文件夹内的mod 及其内部定义的函数默认都是private的,除非pub声明公开。
如果一个元素是私有的,那么只有本模块内的元素以及它的子模块可以访问。如果一个元素是公开的,那么它上一层的模块就有权访问它。

如果存在与文件同名的目录, 则在该目录下定义的模块都是该文件的子模块.(2018 edition有效)如:
rust_mod_study/lip3/src/caller.rs ; rust_mod_study/lip3/src/caller/callerin.rs;
特别注意,callerin这个mod必须在caller.rs中以pub mod callerin;形式声明,否则外部看不到; 最终模块路径为:lip3::caller::callerin::call();

rust 2018 edition 不再需要在根模块中使用extern crate xxx;语法导入第三方包。如在文件main.rs , 
lib.rs中不再需要extern crate xxx语法导入第三方包, 如:rust_mod_study/exp/src/main.rs 
中的extern crate xxx可以去掉了。只需在Cargo.toml中配置好, 然后在代码中以模块路径访问即可,
如:modx::mody::modz::fnx(); 也可以use一下,缩短路径。
详细请看:https://blog.csdn.net/htyu_0203_39/article/details/104849806

*/*/

//extern crate mylib;

use mylib::*;

fn tt_externvc(){
     println!("tt_externvc");
}

fn main() {
     indirect_access();

     tt_externvc();
}

 

Supongo que te gusta

Origin blog.csdn.net/liujiayu2/article/details/114364659
Recomendado
Clasificación