繁体   English   中英

为什么某些代码文件使用close()而不包含unistd.h?

[英]Why do some code files use close() without including unistd.h?

以以下示例为例: http : //codebase.eu/tutorial/linux-socket-programming-chttp://codebase.eu/tutorial/linux-socket-programming-c/code/tcpclient.cpp

基本上,第一个示例应用程序使用close(),但不包括unistd.h。 有人在评论中提到了这一点。 它适用于一些没有它的人,而其他人则必须包含它。

我的问题是为什么:为什么有时没有必要? 始终包含它是否更好? 不需要包含它是什么意思?

引用的代码使用<iostream> unistd.h可能因此而被包含在内。 但是,如果要使用close() ,则不要指望它,也不要自己包含unistd.h

使用int close(int);时最好包含#include <unistd.h> int close(int); 因为这是保证int close(int);的声明的唯一方法int close(int); 在POSIX平台上编译时,将可用于您的源代码。 在某些情况下,其他包含的文件(或您的构建链)可能包含unistd.h或包含对其的前向声明。

当C ++预处理器处理您的源代码时,它基本上将您的#include <something.h>行替换为something.h的预处理内容。 因此,如果something.h (或递归包含的头文件之一)具有#include <unistd.h>行,则您的源代码将看到int close(int);的声明int close(int); 即使您没有直接包含unistd.h标头也是如此。

但是,为确保可移植性,如果使用int close(int); ,请始终包含unistd.h int close(int); 功能( man 3p close )!

如果要查找可能包含头文件的位置,请参阅此问题 同样,您可以对g++ / clang++使用-E标志来输出源代码的完全预处理版本,以了解int close(int);的声明在哪里int close(int); 来自。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM