Я обнаружил работающий (с компиляторами XLC8 и MSFT9) фрагмент кода, содержащий файл C ++ с функцией, определенной с помощью связи C, и ссылочный аргумент. Это беспокоит меня, так как ссылки только на C ++. Рассматриваемая функция вызывается из кода C, где она объявляется как принимающая аргумент указателя на тот же тип вместо ссылочного аргумента.
Упрощенный пример :
Файл C ++ :
extern "C" void f(int &i)
{
i++;
}
Файл C :
void f(int *);
int main()
{
int a = 2;
f(&a);
printf("%d\n", a); /* Prints 3 */
}
Теперь, на улице говорят, что большинство компиляторов C ++ реализуют ссылки так же, как указатель. Так ли это и просто везение, почему этот код работает, или он говорит где-то в спецификации C ++, каков результат, когда вы определяете функцию со ссылочным аргументом и связью C? Я не смог найти никакой информации по этому вопросу.