我尝试使用llvm D编译器编译文件hello-world.d
并收到此消息:
Error: module hello-world has non-identifier characters in filename,
use module declaration instead
我查看了什么是模块声明的文档,然后添加了
module hello_world;
到我文件的顶部。然后编译hello-world文件。请解释为什么需要,如果我的主文件我应该使用什么模块名称。
答案 0 :(得分:2)
在D中,标识符必须仅包含字母,数字或下划线字符。模块名称也是包含其中包的标识符。
对于拉丁字符集,字母字符是a-z和A-Z。非拉丁语言使用的其他字符集也可以使用(utf-8支持)。
没有什么特别的,但请记住,模块(包括包)需要匹配文件系统名称以便查找(例如导入)。
答案 1 :(得分:2)
简而言之 - 如果您不为模块命名,D编译器将使用文件名(不带扩展名)作为模块名称。
因此,如果您将D源文件命名为hello-world.d
,并且它在源文件的顶部没有module hello_world;
之类的内容,则编译器将实际尝试插入和编译{{ 1}}这将失败,因为module hello-world;
不是有效的标识符。
如果文件名为hello-world
作为示例,那么编译器将实际编译具有自动生成名称hworld.d
的模块。