Clion 无法解析 __int128_t 但编译器另有说明
Clion cannot resolve __int128_t but compiler say otherwise
Clion 说 cannot resolve type __int128_t
,但它仍然可以编译。
这是一个错误吗,如果是,有没有办法绕过它?
int main(int argc, char *argv[]) {
__int128_t test = 2333;
printf("%lld", test);
return 0;
}
__int128_t
不是 C 标准定义的标准类型。它是一些编译器支持的扩展。您的编译器在编译发布的代码时似乎支持它,但您的开发环境不理解它并且在包含的 headers 中找不到它的 typedef
。
可能有一些配置可以告诉您的环境有关编译器扩展的信息...
请注意,您的代码中还有其他问题:
- 你不包括
<stdio.h>
- 您将
__int128_t
传递给 printf
以获得格式 %lld
。不能保证这是正确的。您应该将参数转换为 (long long)
以使 printf
正确运行,但类型 long long
可能与 __int128_t
具有不同的值范围,因此打印 test
转换后可能会以系统特定的方式截断该值。 printf
可能有一种扩展格式来处理 __int128_t
类型的值,请查看您的 compiler/runtime 文档。
- 您可能应该在格式字符串的末尾添加一个
\n
。某些系统在没有最终换行符的情况下不会刷新输出。
Clion 说 cannot resolve type __int128_t
,但它仍然可以编译。
这是一个错误吗,如果是,有没有办法绕过它?
int main(int argc, char *argv[]) {
__int128_t test = 2333;
printf("%lld", test);
return 0;
}
__int128_t
不是 C 标准定义的标准类型。它是一些编译器支持的扩展。您的编译器在编译发布的代码时似乎支持它,但您的开发环境不理解它并且在包含的 headers 中找不到它的 typedef
。
可能有一些配置可以告诉您的环境有关编译器扩展的信息...
请注意,您的代码中还有其他问题:
- 你不包括
<stdio.h>
- 您将
__int128_t
传递给printf
以获得格式%lld
。不能保证这是正确的。您应该将参数转换为(long long)
以使printf
正确运行,但类型long long
可能与__int128_t
具有不同的值范围,因此打印test
转换后可能会以系统特定的方式截断该值。printf
可能有一种扩展格式来处理__int128_t
类型的值,请查看您的 compiler/runtime 文档。 - 您可能应该在格式字符串的末尾添加一个
\n
。某些系统在没有最终换行符的情况下不会刷新输出。