2013-08-19 48 views
4

我被告知不要在C++程序中包含像C++頭文件<stdio.h>,而是使用<cstdio>等。如何獲得struct timeval而不包括<sys/time.h>C++ 11:struct timeval

替代的問題,是否有任何C++ 11替代使用select/poll(在POSIX系統上)?

+0

我建議你在C++中使用'' – sehe

+0

你問'struct timeval'還是關於'select' /'poll'?這些是完全不同的問題。 – Nemo

+0

@DyP:我假設他正在談論'',它提供'std :: time(std :: time_t *)',借用標準C. – Nemo

回答

9

<cstdio>和類似的是C標準庫的C++變體。 <sys/time.h>根本就不是C標準庫的一部分(它是certan OS的POSIX接口的一部分),所以不存在C++特定的sys/ctime這樣的東西,所以不需要,你只需要使用相同的頭文件在C中。

擁有C風格和C++風格頭文件的主要原因是將extern "C"應用於頭文件中聲明的函數。在一些系統中,可能需要包裝的功能是這樣的:

extern "C" { 
#include <sys/time.h> 
} 

但在我的Linux系統,它在標準<sys/time.h>文件。

+2

如果你在一個'extern「C」{/*...*/}'鏈接規範中包含POSIX頭文件? – dyp

+0

@DyP:看起來我的機器上的Linux版本有一個'__BEGIN_DECLS',它被設置爲'extern「C」{'(和一個'__END_DECLS'以匹配另一端。 –

+1

@DyP:Doh!有些日子我想知道我是如何輸入任何東西的......;) –

0

<cstdio>是C庫<stdio.h>的C++變體。區別在於C版本是在全局命名空間中定義的。

您可以在這裏看到這些標題的列表:http://www.cplusplus.com/reference/clibrary/

<sys/time.h>不是標準庫的一部分,所以在C中沒有等同++。你只需要像使用C一樣使用它。