android - 警告 : "integer constant too large for long type" . .. 但它是一个 uint64_t?

标签 android c types android-ndk

我正在研究交叉编译 libbtbb到 Android,我收到大量警告:

jni/libbtbb/bluetooth_packet.h:67: warning: integer constant is too large for 'long' type

但是,当我深入研究文件时,这指向了这一行:

static const uint64_t sw_matrix[] = {
    0xfe000002a0d1c014, 0x01000003f0b9201f, 0x008000033ae40edb, 0x004000035fca99b9,
    0x002000036d5dd208, 0x00100001b6aee904, 0x00080000db577482, 0x000400006dabba41,
    0x00020002f46d43f4, 0x000100017a36a1fa, 0x00008000bd1b50fd, 0x000040029c3536aa,
    0x000020014e1a9b55, 0x0000100265b5d37e, 0x0000080132dae9bf, 0x000004025bd5ea0b,
    0x00000203ef526bd1, 0x000001033511ab3c, 0x000000819a88d59e, 0x00000040cd446acf,
    0x00000022a41aabb3, 0x0000001390b5cb0d, 0x0000000b0ae27b52, 0x0000000585713da9};

类型是 uint64_t,而不是“long”……但它似乎指的是指定常量,如 0xfe000002a0d1c014。在这种情况下,我不确定还应该如何指定它,或者我是否可以忽略这些警告。

最佳答案

ULL 后缀添加到您的 64 位整数常量或将它们包含在来自 stdint.h 的冗长的 UINT64_C 宏中。

static const uint64_t sw_matrix[] = {
    0xfe000002a0d1c014ULL, /* etc. */ };

#include <stdint.h>

static const uint64_t sw_matrix[] = {
    UINT64_C(0xfe000002a0d1c014), /* etc. */ };

关于android - 警告 : "integer constant too large for long type" . .. 但它是一个 uint64_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11691121/

相关文章:

android - 如何从 android 代码运行 adb shell 命令?

android - 如果 apk 分析后 lib 文件夹累积超过 60%,如何减小 apk 大小?

java - 数组复制排除每个 x 元素

c++ - 我是否错误地使用了 fscanf?

c - C 中的递归和返回语句

c - 链接静态库时获取 undefined reference

types - 在域特定语言的自定义编辑器中实现类似 IntelliSense 的行为

android - 显示窗口进度但不显示 ActionBar 进度(使用 v7 兼容库)

c# - 查看类型是否可实例化

c++ - 从通过 decltype 获得的方法类型中剥离类