使用 c 头文件时,是否需要将 "struct" 放在 c++ 中的结构实例前面?

Is it required to place "struct" in front of a struct instance in c++ when you use c header files?

本文关键字:c++ 放在 struct 结构 前面 实例 文件 是否 使用      更新时间:2023-10-16

我正在学习如何进行套接字编程,并尝试重新创建c程序的功能: https://beej.us/guide/bgnet/examples/showip.c

c++(因为我更喜欢 c++ 并且它是我打算实现的语言),它使用标头:

stdio.h 
string.h
sys/types.h
sys/socket.h
netdb.h
arpa/inet.h
netinet/in.h

我在代码中用iostream替换了stdio.h,用cstring替换了string.h

我基本上在他的程序中逐行键入代码,阅读文档,尝试理解每个函数和结构。我知道在 c++ 中不需要(如在 c 中)在结构体实例之前加上struct关键字,所以在他的代码中任何有对结构体的引用的地方,我只是省略了它。

在编译中,netinet/in.h 中的所有结构都是未定义的!经过一段时间的故障排除和各种错误,我只是下载了他的程序源代码,并确保它不是我的标准库的问题(Cygwin 是有问题的?像魅力一样工作,但我仍然想要 c++。

我把stdio所有的东西都改成了iostream,用g++而不是gcc编译了它,它仍然有效!唯一不同的是在addrinfo和其他结构体前面有struct

使用 c 头文件时,是否需要将struct放在 c++ 中的结构实例前面?

即使您在程序中使用了所有C内容(标头),如果文件以扩展名结尾,则在一天结束时,它会被系统识别为C++.cpp。因此,只要源文件是C++源文件,就不需要在每个struct实例前面放置struct,则它不应显示任何编译错误。

这意味着"否"作为您问题的答案。

编辑:正如@JesperJuhl指出的那样,这并不总是正确的。异常发生在AiX,VMS,Novell NetWare,DOS系统上。在这种情况下,您需要在每个实例之前使用struct关键字。

"在 c++ 中是否需要将"struct"放在结构实例的前面" -一般来说;不,那是C主义。不过,例外确实存在。