使用c头文件时,是不是需要将“struct”放在c++中的struct实例前面?
Posted
技术标签:
【中文标题】使用c头文件时,是不是需要将“struct”放在c++中的struct实例前面?【英文标题】:Is it required to place "struct" in front of a struct instance in c++ when you use c header files?使用c头文件时,是否需要将“struct”放在c++中的struct实例前面? 【发布时间】:2019-07-23 18:02:46 【问题描述】:我正在学习如何进行套接字编程,并尝试重新创建 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
在我的代码中,我将 stdio.h
替换为 iostream
,并将 string.h
替换为 cstring
。
我基本上是在他的程序中逐行输入代码,一边阅读文档一边尝试理解每个函数和结构。我知道在 c++ 中不需要(如在 c 中)使用 struct
关键字在结构的实例之前,所以在他的代码中任何对结构的引用我只是省略了它.
在编译中,netinet/in.h 中的所有结构都是未定义的!经过一段时间的故障排除和各种错误后,我刚刚下载了他的程序源并确保它不是我的标准库的问题(Cygwin 有问题?)就像一个魅力,但我仍然想要 c++。
我将所有stdio
的内容更改为iostream
,并使用g++
而不是gcc
进行编译,它仍然有效!唯一不同的是 struct
在 addrinfo 和其他结构之前。
在c++中使用c头文件时,是否需要将struct
放在struct实例前面?
【问题讨论】:
可以使用两行程序调查此问题:#include <netinet/in.h>
后跟包含struct
或不包含struct
的定义。
【参考方案1】:
“在 c++ 中是否需要将“struct”放在结构实例的前面?” - 在 general;不,那是C'ism。但确实存在例外。
【讨论】:
广义地说,这是不正确的。有时,您需要这样做。 @SergeyA 好的。是的,我知道。但这不是语言律师的问题,所以我不想深入了解何时可能存在与结构同名的函数(如stat
)以及其他需要关键字的情况。 general 在 C++ 中不需要它。魔鬼在细节中,是的,我同意有细节。【参考方案2】:
即使您在程序中使用了所有C
内容(标题),如果文件以.cpp
扩展名结尾,那么最终系统会将其识别为C++
源。因此,如果您不需要将 struct 放在每个 struct
实例之前,只要您的源文件是 C++
源文件,它就不会显示任何编译错误。
这意味着你的问题的答案是“否”。
编辑:正如@JesperJuhl 指出的那样,这并不总是正确的。在 AiX、VMS、Novell NetWare、DOS 系统上会出现异常。在这种情况下,您需要在每个实例之前使用 struct
关键字。
【讨论】:
“如果文件以 .cpp 扩展名结尾,它会被您的系统识别为 C++ 源代码” - 这是 非常 系统和编译器相关的,绝对不是 普遍正确。试试 AiX、VMS、Novell NetWare、DOS 和它们各自的系统编译器的大小。举个例子以上是关于使用c头文件时,是不是需要将“struct”放在c++中的struct实例前面?的主要内容,如果未能解决你的问题,请参考以下文章
在c / c ++中包含struct和compilation