错误:声明说明符uint32_t int中的两个或多个数据类型;

时间:2015-09-21 14:50:03

标签: c

鉴于以下test.c程序:

#include <stdio.h>

#include <stdint.h>

typedef struct __attribute__((packed)) {
    uint8_t byte;
    uint16_t word;
    uint32_t int;
} subsystem_data_type;

int subsystem_get_data(subsystem_data_type * outptr);

int main() {
    printf("testing\r\n");
    return 1;
}

我尝试使用命令gcc -I. test.c进行编译,但出现以下错误:

test.c:8:14: error: two or more data types in declaration specifiers
     uint32_t int;
              ^
test.c:8:17: warning: declaration does not declare anything
     uint32_t int;
             ^

是否有可能(种类)重新定义int(uint32_t int;)?我缺少什么?

这是我正在研究的更大的代码和平的一部分。请查看第8页,http://gomspace.com/documents/GS-CSP-1.1.pdf处的subsystem.h代码。什么可能会激励uint32_t int;

3 个答案:

答案 0 :(得分:4)

int是保留字,是预定义类型的名称。由于它是保留字,因此您不能将其用作标识符。你需要选择一个不同的名字。

byteword,虽然它们不是保留字或预定义类型,但它们是合理的类型名称,因此我建议不要将它们用作成员名称。它们是完全合法的,但选择不同的名称可以避免混淆。

查看问题中链接的pdf document,第8页上的代码完全不正确。 PDF文档中的代码没有什么特别之处,这些代码已在网络上发布,使其免受错误的影响。 (代码后面的段落将“功能”拼错为“功能”,这是校对不良的另一个迹象。)您可能想联系该文档的作者。在任何情况下,代码都是作为编写子系统API的通用示例,而不是编译和使用的代码。 (但恕我直言,这不是这种错误的借口;如果你要发布源代码,你至少应该验证它是否编译。)

答案 1 :(得分:1)

uint32_t int;

使用其他名称。 int是c中的关键字,用于声明具有整数类型的变量。

由于这些保留字用于在C程序中执行功能,因此不应用作变量名。

答案 2 :(得分:0)

一个解决方案是#define,但你不应该这样做。

#include <stdio.h>

#include <stdint.h>

#define int a_integer_value

typedef struct __attribute__((packed)) {
    uint8_t byte;
    uint16_t word;
    uint32_t int;
} subsystem_data_type;

/* change int to signed to avoid confliction */
signed subsystem_get_data(subsystem_data_type * outptr);

signed main() {
    printf("testing\r\n");
    return 1;
}