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

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);
else
    e.type = Type.tchar.immutableOf().arrayOf();

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

puts(X.ptr);

http://www.kler.cn/a/136145.html

相关文章:

  • nginx-rtmp服务器搭建
  • opc da 服务器数据 转 opc ua项目案例
  • Python爬虫(入门+进阶)
  • Chrome被360导航篡改了怎么改回来?
  • Windows脚本命令与Linux Bash脚本命令
  • YOLOv11 引入高效的可变形卷积网络 DCNv4 | 重新思考用于视觉应用的动态和稀疏算子
  • 好用的开源项目地址
  • 实验三 循环结构程序设计(Python)
  • Hive调优
  • 2311rust,到38版本更新
  • 【C++】传递‘类非静态成员函数’用作回调函数
  • 数据结构与算法-图
  • ElasticSearch在Windows上的下载与安装
  • flask创建步骤
  • Excel 文件比较工具 xlCompare 11.01 Crack
  • 深度学习人体跌倒检测 -yolo 机器视觉 opencv python 计算机竞赛
  • WebSocket协议详解
  • linux rsyslog综合实战1
  • CI/CD相关概念学习
  • Apache POI(Java)
  • flask实现session开发
  • 1. hadoop环境准备
  • 基于一致性算法的微电网分布式控制MATLAB仿真模型
  • Java格式化类Format
  • 电子学会C/C++编程等级考试2022年06月(一级)真题解析
  • 初识分布式键值对存储etcd