28用d编程模块
static this() 和static ~this()
,模块构造和析构函数,每线程一次,总程序一次的,可用shared static this() 和 shared static ~this()
一堆模块叫一个包.
import std.stdio;
选择导入:import std.stdio :writeln;
,减少名称冲突
本地导入,可以最小化外部依赖
import carnivore = animal.jaguar;
import vehicle = car.jaguar;
重命名,避免冲突.
// The contents of the file animal/package.d:
module animal;
public import animal.cat;
public import animal.dog;
public import animal.horse;
一个:package.d
:可导入多个子包.如上书写.
公开导入
则始终可用
deprecated("过时了.")
void do_something() {
// ...
}
编译器开关:
-d,表允许使用过时开关
-dw,使用时发出警告.
-de,使用时则报错误
可以用
deprecated("Please use doSomething() instead.")
alias do_something = doSomething;
来继续使用旧名字,但实际用的新函数.
dmd deneme.d animal/cat.d animal/dog.d -w -de
还要加上其他文件,才能编译.
生成库命令:
dmd animal/cat.d animal/dog.d -lib -ofanimal -w -de
,关键在-lib
,-of
表输出名字.
这样dmd deneme.d animal.lib -w -de
就可以了.因为库中有链接.
module deneme;
import std.stdio;
import core.demangle;
void foo() {
}
void main() {
writeln(mangle!(typeof(foo))("deneme.foo"));
}//_D6deneme3fooFZv,
可用来取混杂名
.以方便链接外部库啊,c++库啊
.
外部链接类型有C, C++, D, Objective-C, Pascal, System, 和 Windows.
需要链接c库时
extern(C) void foo();//c样式的链接
void main() {
foo(); // 将编译为调用'_foo'
}
c类型都是前面加个下划线
.调用c++如下:
extern(C++, a.b.c) void bar();
void main() {
bar(); // a call to a::b::c::bar()
a.b.c.bar(); //类似上面
}
D库绑定
extern
还有一个意思:该变量是外部存储的.类似c/c++.
d编译器不用保留空间.
extern(C) extern int g_variable;
表明,本变量已在外部的c库定义.不用自己搞一个.
如果这样extern(C) int g_variable;
表明用c链接的一个d变量.
即外
有两个含义:1是链接方式,2是在外部存储.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现