原文
D中是否可用仅C头文件库
?
在C语言
中,我需要这样做
:
#define STB_DS_IMPLEMENTATION
#include "stb_ds.h"
在包含h文件
前,必须在单个C文件
中定义.
在D中试过:
enum STB_DS_IMPLEMENTATION = 1;
import stb_ds;
但它不管用
.有建议吗?也许使用中间C文件
会工作 ,但我想知道D
是否可完成.
这里自动转换
dmd -c test.c -Hf=test.di
一般使用"仅头"
方式,建议把扩展文件名更改为.c
并直接编译
它.
是的,你最好的选择是:
1,把.h
重命名为.c
并编辑它,以便通过或删除STB_DS_IMPLEMENTATION
检查.
2,用你已编写的内容创建一个C文件
:
#define STB_DS_IMPLEMENTATION
#include "stb_ds.h"
并导入
它.
尚不支持从d文件
导入.h
文件,因为查找优先级
存在争议:
0
1
正在试使用仅头文件
的C库
.此项目中的h文件
,具体为:https://github.com/nothings/stb
.
如果没有#define
,这不行.只要有impl
代码,按只包含一次
设计此头库
,因此依赖定义
变量的C文件
来显式"启用"
要包含的impl
代码.
根据链接
线程,我试从仅有定义和包含
的基本C文件
生成一个di
文件:
#define STB_DS_IMPLEMENTATION
#include "stb_ds.h"
但DMD
产生了一个段错误
错误:
dmd -c import_stb_ds.c -Hf=stb_ds.di
`[1]73719`段错误`dmd -c import_stb_ds.c -Hf=stb_ds.di`
LDC
同样:
ldc2 -c import_stb_ds.c -Hf=stb_ds.di
我应该报告错误吗?
-H
开关有一个错误:
这里
但这不应是必需
的,你应该可导入
c文件.
这很奇怪,我会看看
是否可重现它.
化简为:
enum { A };
用-H
编译,得到段错误
.
相关代码
在hdrgen.d
中:
foreach (em; *d.members)
{
if (!em)
continue;
buf.writestring("alias ");
buf.writestring(em.ident.toString);
buf.writestring(" = ");
buf.writestring(d.ident.toString);
buf.writeByte('.');
buf.writestring(em.ident.toString);
buf.writeByte(';');
buf.writenl();
}
它假定枚举
有个名字,但在本例
中,d.ident
为null
.