betterC
的目的就是最大可能与C编译器通信
,即你写的d
,就是c
.
注意:这是d代码
现在谷哥翻译
根本翻译不了日语文章
.
可以这样,对代码类串用utf8,对显示类串用gbk
,这样就可以用中文
了.加一个区分开关就行了.
module count;
@nogc:
nothrow:
import core.atomic : atomicOp, atomicLoad;
extern(C){
int count()
{
scope(exit)counter.addOne();
return counter.getValue();
}
}
private:
shared struct AtomicCounter(T)
{
void addOne() pure
{
atomicOp!"+="(_v, 1);
}
int getValue() const pure
{
return atomicLoad(_v);
}
private:
T _v;
}
unittest
{
shared test_counter = AtomicCounter!int(42);
assert (test_counter.getValue() == 42);
test_counter.addOne();
assert (test_counter.getValue() == 43);
}
shared counter = AtomicCounter!int(1);
c部分:
#include <stdio.h>
#include <stdlib.h>//exit(0)函数
#pragma comment(linker,"/ENTRY:main")
#pragma comment(lib, "ucrt.lib")
#pragma comment(lib, "libvcruntime.lib")
//memcpy,memcpy找不到地址,要加vcruntime.,可把上面的东西用个文件包含住.生成可执行文件仅`3kb`
//含lib的是静态加载,不含的为动态加载.ucrt静态加载,会加载大量70kb进来,所以,就改为动态加载
int count(); //D代码过来的
int main()
{
int j;
for (j = 0; j < 10; j++)
{
printf("%d\n", count());
}
return 0;
}
命令
ldc2 -c -betterC b.d
cl c.c b.obj