Ho riscontrato un pezzo di codice funzionante (con compilatori XLC8 e MSFT9), contenente un file C++ con una funzione definita con collegamento C e un argomento di riferimento. Questo mi infastidisce, dato che i riferimenti sono solo in C++. La funzione in questione è chiamata dal codice C, dove viene dichiarata come se stesse prendendo un argomento puntatore allo stesso tipo al posto dell'argomento di riferimento.Argomento per riferimento C++ e collegamento C
esempio semplificato:
C++ file di:
extern "C" void f(int &i)
{
i++;
}
file C:
void f(int *);
int main()
{
int a = 2;
f(&a);
printf("%d\n", a); /* Prints 3 */
}
Ora, la parola sulla strada è che la maggior parte dei compilatori C++, sotto il cofano, implementa i riferimenti proprio come un puntatore. È così e solo per pura fortuna il motivo per cui funziona questo codice o si dice da qualche parte nelle specifiche C++ quale sia il risultato quando si definisce una funzione con un argomento di riferimento e un collegamento C? Non sono stato in grado di trovare alcuna informazione su questo.
Da quello che posso vedere la sezione 7.5 della Lo standard C++ (Linkage Specification) non dice nulla al riguardo. –