![](/img/trans.png)
[英]How do I use **environ from unistd.h to search for the right path?
[英]Why do some code files use close() without including unistd.h?
以以下示例为例: http : //codebase.eu/tutorial/linux-socket-programming-c和http://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.