当前位置: 首页 > news >正文

2311d导入c的语义不同

原文
以下D代码正常工作:

enum X = "X";
import core.stdc.stdio;
void main(){puts(X);
}

但是,如果该X枚举C文件#define的结果,则会出现错误:

//`x.c`
#define X "X"
//D代码
import x;
import core.stdc.stdio;
void main(){puts(X); //错误
}

错误:不能用"(char[2])"参数类型调用"core.stdc.stdio.puts(scope const(char*)s)"函数
无法传递"char[2]"类型参数的"X""scopeconst(char*)s"参数.
是因为C字面char[2]而不是const(char)[2].我会调查的.
问题出在expressionsem.d(4188):

if (sc && sc.flags & SCOPE.Cfile)e.type = Type.tchar.sarrayOf(e.len + 1);
elsee.type = Type.tchar.immutableOf().arrayOf();

不确定解决方法是否应该修复,毕竟C语义是不同的.
虽然,作为变通,可以:

puts(X.ptr);
http://www.lryc.cn/news/236701.html

相关文章:

  • OpenHarmony Meetup北京站招募令
  • C语言——冒泡排序
  • 08.智慧商城——购物车布局、全选反选、功能实现
  • 金属压块液压打包机比例阀放大器
  • python 自动化福音,30行代码手撸ddt模块
  • 基于GATK流程化进行SNP calling
  • 【Java SE】如何解读Java的继承和多态的特性?
  • uniapp 手动调用form表单submit事件
  • 11月20日星期一今日早报简报微语报早读
  • Unity中 Start和Awake的区别
  • 进度条、git常见指令以及gdb的常用指令
  • ubuntu20编译安装pkg-config
  • 奇富科技发布鸿蒙元服务1.0版本,打造鸿蒙生态金融科技全新体验
  • 【Git学习一】初始化仓库git init的使用和提交git add与git commit的使用
  • Redux-状态管理组件
  • 【bigo前端】egret中的对象池浅谈
  • 用公式告诉你 现货黄金投资者要不要换策略?
  • 系列六、多线程集合不安全
  • MidJourney笔记(1)-入门
  • CRM系统定制开发价格
  • Kubernetes实战(五)-pod之间网络请求实战
  • 7年经验之谈 —— 如何高效的开展app的性能测试?
  • 小程序action-sheet结合自定义tabbar显示
  • 机器学习笔记 - 隐马尔可夫模型的简述
  • iOS学习 --- Xcode 15 下载iOS_17.0.1_Simulator失败解决方法
  • 多视图聚类论文阅读(二)
  • Docker在Centos7下的安装
  • LLM大模型4位量化实战【GPTQ】
  • 安装keras、tensorflow
  • ffmpeg知识点整理