Il comportamento di <fcntl.h>
e <unistd.h>
in C++ non è specificato dallo standard (perché anch'essi non fanno parte dello standard C89). Detto questo, non ho mai visto una piattaforma in cui (a) esiste e (b) in realtà ha bisogno di essere avvolto in un blocco extern "C"
.
Il comportamento di <stdio.h>
, <math.h>
e le altre intestazioni C standard è specificato dalla sezione D.5 dello standard C++ 03. Non richiedono un blocco wrapper extern "C"
e riversano i loro simboli nello spazio dei nomi globale. Tuttavia, tutto nell'Allegato D è "deprecato".
La canonica C++ sotto forma di queste intestazioni è <cstdio>
, <cmath>
, ecc, e sono specificati dalla sezione 17.4.1.2 (3) dello standard C++, che dice:
<cassert> <ciso646> <csetjmp> <cstdio> <ctime> <cctype> <climits>
<csignal> <cstdlib> <cwchar> <cerrno> <clocale> <cstdarg> <cstring>
<cwctype>
Salvo come indicato nelle clausole da 18 a 27, il contenuto di ciascuna intestazione cname deve essere uguale a quello dell'intestazione corrispondente.h, come specificato in ISO/IEC 9899: 1990 Linguaggi di programmazione C (clausola 7) o ISO/IEC: 1990 Linguaggi di programmazione-C EMENDAMENTO 1: Integrità C, (clausola 7), come ap proprio, come se per inclusione. Nella Libreria standard C++, , tuttavia, le dichiarazioni e le definizioni (ad eccezione dei nomi che sono definiti come macro in C) rientrano nell'ambito dello spazio dei nomi (3.3.5) dello std dello spazio dei nomi .
Quindi lo standard, modo non deprecato, canonica da usare (per esempio) printf
in C++ è quello di #include <cstdio>
e quindi richiamare std::printf
.
Ho appena trovato questa domanda simile alla tua: [Perché abbiamo bisogno di una "C" esterna {#include} in C++?] (Http://stackoverflow.com/questions/67894/why-do-we-need -extern-c-include-foo-h-in-c) –
AusCBloke