我正在尝试打印一个数字,但是我收到错误,说我的打印功能错误了:
lead()
这是错误:
m2 <- structure(c(16659.1964, 16662.0615, 16639.4316, 8046.004, 495.3461,
1682.8678, 46129.599, 46105.731, 45986.194, 16460.859, 1143.432,
3879.721, 53180.211, 53185.511, 53043.683, 17660.545, 4671.55,
4858.802, 37259.453, 37191.243, 37157.778, 20728.696, 1563.926,
3062.387, 61108.754, 61115.984, 60889.781, 25369.899, 2078.405,
4577.366, 77946.898, 77913.992, 77855.132, 26558.286, 4993.391,
8218.718, 87433.948, 87379.138, 87213.507, 27932.843, 3479.066,
7966.32), .Dim = 6:7, .Dimnames = list(c("hsa-let-7a-5p|hsa-let-7a-1",
"hsa-let-7a-5p|hsa-let-7a-2", "hsa-let-7a-5p|hsa-let-7a-3",
"hsa-let-7b-5p|hsa-let-7b",
"hsa-let-7c-5p|hsa-let-7c", "hsa-let-7d-5p|hsa-let-7d"), c("124G",
"124R", "126R", "126G", "26R", "26G", "243G")))
还有其他一些打印功能可以解决这个问题吗?
答案 0 :(得分:5)
LLVM IR没有隐式强制转换(显式强制转换是单独的指令)。
您的%d
变量的类型为i32
,来自第一条指令(错误消息为'%d' defined with type 'i8'
,可能您的示例不是您的真实代码?)。
对于printf
函数,它恰好是C printf。你应该传递完全相同的参数 - 一个格式字符串(i8*
指向null终止"%d"
)和一个数字。
对于字符串,您应该定义全局
@formatString = private constant [2 x i8] c"%d"
并将其作为第一个参数传递给printf
:
%call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @formatString , i32 0, i32 0), i32 %d)
完整代码:
@formatString = private constant [2 x i8] c"%d"
define i32 @main() {
entry:
%d = shl i32 2, 3
%call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @formatString , i32 0, i32 0), i32 %d)
ret i32 1
}
declare i32 @printf(i8*, ...)