Skip to content

Conversation

@Microvenator
Copy link
Contributor

@Microvenator Microvenator commented Jan 2, 2025

Если следовать оглавлению, то сейчас должна была идти глава "Базовые концепции". Но если про все это рассказывать хоть сколько-то не поверхностно (да еще набрасывать задач), то глава получилась бы монструозной.

Поэтому было принято решение разбить ее на несколько глав. И эта глава "Простые функции" - первая из них.

Знакомим читателя с функциями. Согласно спиральному подходу, более подробное знакомство состоится еще через N глав в главе "Функции".

}
```

Объявлений одной и той же функции в программе может быть сколь угодно много. Но определение должно быть только одно. Так гласит один из пунктов [правила одного определения](https://en.cppreference.com/w/cpp/language/definition) (ODR, one definition rule). Нарушение ODR приведет к ошибке компиляции.
Copy link
Collaborator

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.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мы пока не рассказывали про этапы сборки. Кроме того, мы же не говорим "я скомпилирую, а затем слинкую проект". Говорим просто "я скомпилирую проект")

Copy link
Collaborator

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}
Copy link
Collaborator

@khva khva Jan 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

По комментарию Алдара. Нужно показать полную сигнатуру функции в условии либо сказать какой тип следует использовать для входного параметра и результата. Лучше указать тип.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants