Поведение <fcntl.h>
и <unistd.h>
в C ++ не указано стандартом (поскольку они также не являются частью стандарта C89). Тем не менее, я никогда не видел платформу, где они (а) существуют, и (б) на самом деле нужно обернуть в блок extern "C"
.
Поведение <stdio.h>
, <math.h>
и другие стандартные заголовки C указаны в разделе D.5 стандарта C ++ 03. Они не требуют блока оболочки extern "C"
, и они выгружают свои символы в глобальное пространство имен. Однако все, что содержится в приложении D, «устарело».
Каноническая форма C ++ этих заголовков - <cstdio>
, <cmath>
и т. Д., И они указаны в разделе 17.4.1.2 (3) of стандарт C ++, в котором говорится:
<cassert> <ciso646> <csetjmp> <cstdio> <ctime> <cctype> <climits>
<csignal> <cstdlib> <cwchar> <cerrno> <clocale> <cstdarg> <cstring>
<cwctype>
За исключением случаев, указанных в статьях с 18 по 27, содержимое каждого заголовка cname должно быть таким же, как содержимое соответствующего заголовка name.h, as указанных в ISO / IEC 9899: 1990 Языки программирования C (раздел 7), или Языки программирования по ИСО / МЭК: 1990.-C ПОПРАВКА 1: C Целостность (пункт 7), если это необходимо, как бы включив. Однако в стандартной библиотеке C ++ декларации и определения (за исключением имен, которые определены как макросы в C) находятся в области пространства имен (3.3.5) пространства имен std.
blockquote>So стандартный, не устаревший, канонический способ использования (например)
printf
в C ++ -#include <cstdio>
, а затем вызываетstd::printf
.
Это поможет: http://www.devx.com/wireless/Article/40842/1954
Обратите внимание, что рекомендуется переносить весь доступ к данным в ContentProviders