C stdint 类型的预声明

Predeclaration of C stdint types

当我尝试声明在 stdint.h 中定义的某些类型时,与 /usr/include/bits/stdint-uintn.h:24:19 预声明发生冲突

typedef struct __uint8_t uint8_t;

错误信息:

/usr/include/bits/stdint-uintn.h:24:19: error: conflicting types for ‘uint8_t’
   24 | typedef __uint8_t uint8_t;
      |                   ^~~~~~~
In file included from ../src/server/connection.c:1:
../src/server/connection.h:4:26: note: previous declaration of ‘uint8_t’ was here
    4 | typedef struct __uint8_t uint8_t;

如何在我的头文件中预先声明这些类型以避免循环依赖?

这是因为stdint.h包括bits/stdint-uintn.h,其中

typedef struct __uint8_t uint8_t;

已定义。

您不应该重新定义 uint8_t。对我来说,解决方案是删除

typedef struct __uint8_t uint8_t;

来自您的文件 ../src/server/connection.c.

你有什么理由需要自己重新定义它吗?

#include <stdint.h> 是声明这些类型的正确方法。任何其他方法未定义 and/or non-portable.

标准 headers 永远不会存在循环依赖问题。