【发布时间】:2013-11-05 04:45:49
【问题描述】:
因为喜欢折磨自己,在将 GCC 4.7 移植到 Android 后,我决定立即尝试将 GCC 4.8 移植到 Android。
我在构建的 libcpp 部分遇到了以下错误:
../../gcc-4.8/libcpp/files.c:725:27: error: cannot convert 'long long int*' to 'off_t* {aka long int*}' for argument '7' to 'unsigned char* _cpp_convert_input(cpp_reader*, const char*, unsigned char*, size_t, size_t, const unsigned char**, off_t*)'
我的问题是:这种转换是否可行?
编辑:我最初发布了一个答案,即需要编写演员表而不是依赖隐式转换,但鉴于这样做后我遇到的问题,我将其删除。
这是有问题的原始代码:
file->buffer = _cpp_convert_input (pfile,
CPP_OPTION (pfile, input_charset),
buf, size + 16, total,
&file->buffer_start,
&file->st.st_size);
这是我尝试过的演员表(注意:我对 C 的理解只有初步的了解):
off_t ot = (off_t) file->st.st_size
在目标设备上运行时,使用上述转换会导致 cc1 二进制文件出现“错误地址”错误。
【问题讨论】:
-
C 中的对象指针类型之间没有隐式转换(
void *除外)。 -
编辑:等等...根据 Pocket C(我在发布此内容后捡到的),标量和指针类型之间可以进行隐式转换。对象指针和指针类型有区别吗?
标签: android c gcc type-conversion long-integer