У меня странная проблема с компиляцией: код
typedef struct {
unsigned int len;
unsigned char value[1];
} __attribute__((packed)) value_t;
typedef struct {
unsigned int len;
unsigned char msg_type;
unsigned short ret_val;
unsigned long long timestamp;
value_t working_val;
} __attribute__((packed)) resp_t;
...
logd("sizeof(resp_t) = %u", sizeof(resp_t));
// logd macro expands to __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
выдает ошибку:
error: format specifies type 'unsigned int' but the argument has type 'unsigned long'
Это кажется странным, поскольку упакованная структура, скомпилированная для arm64 Android, должна толькобыть 28 байтов (я думаю), который легко помещается в целое число без знака, поэтому я ожидал бы, что sizeof вернет целочисленный тип без знака.Даже если бы они не были упакованы, я бы ожидал, что sizeof вернет целочисленный тип без знака, чтобы содержать их, так как они довольно минимальные структуры.В любом случае, я изменил код на:
logd("sizeof(resp_t) = %lu", sizeof(resp_t));
, и теперь я вижу обратную ошибку:
error: format specifies type 'unsigned long' but the argument has type 'unsigned int'
Переключение кода снова приводит к исходной ошибке.Что здесь происходит?