-
Notifications
You must be signed in to change notification settings - Fork 17
Курс по C++. Глава "Простые функции" #166
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| } | ||
| ``` | ||
|
|
||
| Объявлений одной и той же функции в программе может быть сколь угодно много. Но определение должно быть только одно. Так гласит один из пунктов [правила одного определения](https://en.cppreference.com/w/cpp/language/definition) (ODR, one definition rule). Нарушение ODR приведет к ошибке компиляции. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В некоторых случаях привдет к ошибке линковки.
Например, есть одно объявление в main.cpp и по определению в one.cpp и two.cpp. В таком случае будет ошибка линковки
[build] duplicate symbol 'foo()' in: [build] /Users/dmitryshipilov/workspace/dummy/cpp/build/CMakeFiles/cpp_experiments.dir/two.cpp.o [build] /Users/dmitryshipilov/workspace/dummy/cpp/build/CMakeFiles/cpp_experiments.dir/one.cpp.o [build] ld: 1 duplicate symbols [build] clang++: error: linker command failed with exit code 1 (use -v to see invocation) [build] ninja: build stopped: subcommand failed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мы пока не рассказывали про этапы сборки. Кроме того, мы же не говорим "я скомпилирую, а затем слинкую проект". Говорим просто "я скомпилирую проект")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Дима прав, говорить про ошибку компиляции не совсем корректно. Предлагаю перефразировать последнее предложение. Например:
Нарушение ODR приведет к ошибке при построении проекта.
| - Импортировали стандартную библиотеку `std`. В ней содержится [функция](https://en.cppreference.com/w/cpp/io/println) `println()`, отвечающая за форматированный вывод. | ||
| - Вызвали `println()`. Она находится в пространстве имен (namespace) `std`, и мы указали его при вызове: `std::println()`. | ||
|
|
||
| Напишите функцию `to_fahrenheit()`. Она принимает вещественное число — температуру в градусах по Цельсию, и возвращает градусы по шкале Фаренгейта. {.task_text} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
По комментарию Алдара. Нужно показать полную сигнатуру функции в условии либо сказать какой тип следует использовать для входного параметра и результата. Лучше указать тип.
Если следовать оглавлению, то сейчас должна была идти глава "Базовые концепции". Но если про все это рассказывать хоть сколько-то не поверхностно (да еще набрасывать задач), то глава получилась бы монструозной.
Поэтому было принято решение разбить ее на несколько глав. И эта глава "Простые функции" - первая из них.
Знакомим читателя с функциями. Согласно спиральному подходу, более подробное знакомство состоится еще через N глав в главе "Функции".