Я столкнулся с работой (с компиляторами XLC8 и MSFT9), содержащей файл С++ с функцией, определенной с помощью 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-связью? Я не смог найти информацию об этом.