现在使用我自己的语言已有一段时间了,我一直在实现隐式和显式强制转换。回去检查调用它们时会发生什么。一切都进行得很顺利,直到我尝试从double调用强制转换。由于某种原因将双精度数传递给函数会导致clang在将obj文件链接到调用它的cpp文件时给我一个错误,即:“ clang.exe:错误:链接器命令失败,退出代码为1143(使用-v查看调用)program.obj:致命错误LNK1143:无效或损坏的文件:COMDAT部分0x5没有符号
然后我注意到这在float时也会发生,但在整数等时不会发生。我编写了一个简短的函数(将值乘以double并返回它)来检查问题是否与float / double类型的参数有关。仅当调用该函数,定义该函数但不调用该函数,一切运行正常时,才会发生该错误。我还尝试过将双精度字面量存储在内存(alloca)中,而且效果也很好,所以问题就出在将参数实际传递给函数上。
一个简单的LLVM IR,用于一个函数,该函数接受一个double值并将其返回,然后从main调用(main的名称为_mainCRTStartup,以免将其与来自cpp文件的main函数的符号混淆,然后再调用它( extern“ C”))
感谢您的任何帮助! :D