Почему не компилируется функция с входными данными, у которых есть ссылка на указатель?

Я протестировал это на своей Linux-системе с gcc и отлично компилируется.

void myFunc(int* &input);

Который компилируется без ошибок.

На моем авре объявляю ту же функцию:

void myFunc(int* &input);

Выдает ошибку компиляции:

expected ';', ',' or ')' before '&' token

версия gcc на linux 4.6.3

версия gcc для avr (avr-gcc) — 3.4.2.


person user791953    schedule 07.10.2013    source источник


Ответы (3)


В C (не уверен насчет C++)

void myFunc(int* &input);  

не является действительной декларацией. В языке C все вызовы выполняются по значению. В отличие от C++, здесь нет вызова по ссылке.

person haccks    schedule 07.10.2013

Сохраните этот код с расширением .c и скомпилируйте. вы получите ту же ошибку. Потому что C не позволяет использовать ссылки в списке параметров функции, а объявление и определение As Like C++.

person Gangadhar    schedule 07.10.2013
comment
Да, похоже, у меня было расширение .cpp вместо c при вызове gcc. - person user791953; 07.10.2013

Используемое вами объявление допустимо в C++, но недопустимо в C, поскольку в C нет ссылок. Для компиляции кода следует использовать g++ или другой компилятор C++.

void myFunc(int* &input);

Кстати, здесь передается указатель по ссылке, а не указатель на ссылку. То есть это ссылка на указатель, а не наоборот.

person Joni    schedule 07.10.2013
comment
Ах, попался, похоже, у меня был файл ext. называется .cpp, когда я скомпилировал его в Linux с помощью gcc. - person user791953; 07.10.2013
comment
Как вы его запускаете? В моей системе GCC 4.7.3 выдает ту же ошибку, что и avr-gcc. - person Joni; 07.10.2013
comment
gcc test.cpp -> нет ошибок | gcc test.c -> ошибки, как и ожидалось - person user791953; 07.10.2013