He encontrado un código de trabajo (con compiladores XLC8 y MSFT9), que contiene un archivo C++ con una función definida con enlace C y un argumento de referencia. Esto me molesta, ya que las referencias son solo C++. La función en cuestión se llama desde el código C, donde se declara que toma un argumento de puntero al mismo tipo en lugar del argumento de referencia.C++ argumento de referencia y enlace C
ejemplo simplificado:
archivoC++:
extern "C" void f(int &i)
{
i++;
}
archivo C:
void f(int *);
int main()
{
int a = 2;
f(&a);
printf("%d\n", a); /* Prints 3 */
}
Ahora, la palabra en la calle es que la mayoría de los compiladores de C++, bajo el capó, implementar referencias como un puntero. ¿Es así y solo por pura suerte la razón por la que funciona este código o dice algo en la especificación C++ cuál es el resultado cuando defines una función con un argumento de referencia y un enlace C? No he podido encontrar ninguna información sobre esto.
Por lo que puedo ver sección 7.5 de la El estándar C++ (especificación de vinculación) no dice nada sobre esto. –