Если мы не упомянем прототип функции, вызовите функцию из основного и запишите определение после main, оно даст ошибку. Если мы напишем определение функции до main и не будем писать прототип, то программа работает хорошо. Поэтому мой вопрос заключается в том, если мы напишем определение функции до main (без написания прототипа), решает ли она проблему отказа от прототипа функции (т. Е. Компилятор начнет читать сверху вниз и все равно сможет узнать о имя функции, тип возврата, параметры и т. д.)Прототип функции/определение
ответ
Определение функции без предшествующего прототипа семантически эквивалентно объявлению прототипа непосредственно перед определением функции. Так что да, это безопасно: определение функции без прототипа, перед любым использованием функции, будет работать нормально.
Компилятор переходит к определению функции при вызове этой функции. Прототип функции используется для аргументов и проверки типа возвращаемого значения. Таким образом, вы можете безопасно испускать прототип функции в вашем случае ...
Да (для C++), компилятор примет это. Для вызова функции компилятор должен увидеть свой прототип или определение раньше. Кроме того, файлы единиц перевода (cpp) составлены сверху вниз, поэтому:
void foo();
void foo2() {
}
int main() {
foo();
foo2();
}
void foo() {
}
оба являются правильными. Если вы предоставите прототип foo()
без определения foo
ниже main(), компилятор по-прежнему примет ваш код, но компоновщик будет жаловаться на ошибку.
@ Marcin Jedrzejewski Если мы пишем void foo() в качестве прототипа и вызываем эту функцию в основном и не определяем функцию ниже main, как вы сказали, компилятор дает ошибку неопределенной ссылки на foo()? – Rooney10
@ Rooney10 да, но это на самом деле компоновщик, который выдаст ошибку, компиляция будет в два этапа, сначала все единицы перевода будут скомпилированы, тогда все результирующие объектные файлы будут связаны. Компилятор не знает, где вы, возможно, определили foo(), он может быть определен в некоторой другой единицы перевода (файл .cpp). – marcinj
- 1. Экспорт прототипа в node.js: module.exports = Прототип или экспорт. Прототип = Прототип?
- 2. .прототип и [[прототип]]. Почему .prototype - пустой объект?
- 3. Прототип наследования
- 4. Прототип jQuery
- 5. Оригинальный прототип
- 6. Многопоточность - прототип
- 7. Прототип RECV()
- 8. Прототип структуры?
- 9. прототип рекурсивный $
- 10. Объект-прототип
- 11. прототип функции
- 12. прототип Javascript
- 13. JavaScript - прототип
- 14. унаследуют прототип
- 15. Модифицировать прототип на ребенке влияет на прототип родителя?
- 16. Javascript продлить прототип объекта, но сохранить старый прототип
- 17. Прототип конструктора Javascript
- 18. Прототип функции с эллипсисом
- 19. прототип вопрос hasclassname
- 20. Прототип Строка с машинопись
- 21. Function.prototype.method что прототип [имя]
- 22. Что такое управляемый прототип?
- 23. Прототип функционального объекта
- 24. Прототип метода в Java
- 25. Простой прототип Javascript, __proto__
- 26. Почему присвоить прототип себе
- 27. Редактировать строки - прототип
- 28. Добавить функцию в прототип
- 29. Javascript Прототип не работает
- 30. массива прототип машинопись
Определение функции включает объявление функции, если оно не было объявлено ранее. –
Кроме того, что происходит, если вы вызываете функцию, если она не была объявлена ранее, отличается от C и C++. C и C++ имеют некоторое сходство, но они действительно очень разные языки с очень разными семантическими правилами. Поэтому, если вы хотите получить окончательный ответ в будущем, выберите один язык. –
Я думаю, что C и C++ в этом отношении очень разные. Вы должны указать, какой из них вы используете, или какую совместимость вы планируете. –