我正在跟随Beej的网络编程指南,并且我正在使用VC++ 2010,但是当我将结构体复制粘贴到我的程序中时,一些类型出现了不正确的标识符。例如:
u_int32_t
出现了这种情况,经过一些搜索,我发现这些是C语言约1999年的旧类型。我本可以只包含 stdint.h,但那就需要我记住它们的含义。相反,我使用标准的 int
,它有32位长(4字节),对于其他64位长(8字节)的类型,我使用了 long long int
。
总之,我正在缩小到最后一个语法错误,并且它说 sa_family_t
是无效的标识符。我不知道它应该是什么,搜索也没有找到任何结果。这就是我的问题,我不知道我应该为该类型标识符指定什么。
还有一件事情困扰着我: char __ss_pad1[_SS_PAD1SIZE];
这个 SS_PAD1SIZE
也显示为无效。
sa_family_t
是如何被使用的?此外,请注意,u_int32_t
是无符号类型,而int
是有符号的。这可能会导致您的程序在后续中出现不良行为,具体取决于声明为int
的变量如何被使用。 - HeatfanJohnu_int32_t
在 C 或 POSIX 中不是标准类型。uint32_t
是 C99 及其后续版本中的标准(但从技术上讲是可选)类型。请记住,一些 C 编译器(尤其是来自 Microsoft 的编译器)尚未付出太多努力来实现 C99;它们仍然基本上是 C89 编译器。 - Jonathan Leffler