Чем void отличается от int c
Перейти к содержимому

Чем void отличается от int c

  • автор:

PragmaSpot

— информационная безопасность, программирование, железо.

Страницы

суббота, 31 декабря 2011 г.

Большая разница: int main() или void main()?

Функция main() обязательна для простых консольных приложений, которые мы разрабатываем в Академии в качестве множества примеров и заданий. Однако как оказалось существует существенная разница в ее употреблении. Ее могут записывать по-разному: int main() и void main().
Однако запись приведенная выше не будет корректна без записи return 0 для int main() и exit(0) для void main(). На одном из форумов встретил сообщение, что void mai() не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения. При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе. Это сообщение объявляет ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме. Именно поэтому как первая запись, так и вторая требует записи операторов return 0 для int main() или для void main() – записи оператора exit(0).
Однако в языке С++ предпочтение при записи функции отдается целочисленному значению, что выглядит вот так:
int main()
return 0;
>

Встроенные типы (C++)

Встроенные типы (также называемые фундаментальными типами) задаются стандартом языка C++ и встроены в компилятор. Встроенные типы не определены в файле заголовка. Встроенные типы делятся на три основные категории: целочисленные, с плавающей запятой и void. Целочисленные типы представляют целые числа. Типы с плавающей запятой могут указывать значения, которые могут содержать дробные части. Большинство встроенных типов рассматриваются как отдельные типы компилятором. Однако некоторые типы являются синонимами или рассматриваются как эквивалентные типы компилятором.

Тип void

Тип void описывает пустой набор значений. Переменная типа void не может быть указана. Тип void используется в основном для объявления функций, которые не возвращают значения или объявляют универсальные указатели на нетипизированные или произвольные типизированные данные. Любое выражение можно явно преобразовать или привести к типу void . Однако такие выражения можно использовать только в следующих операторах и операндах:

  • в операторе выражения (Дополнительные сведения см. в разделе Выражения.)
  • в левом операнде оператора запятой (Дополнительные сведения см. в разделе Оператор запятой.)
  • во втором и третьем операндах условного оператора ( ? : ). (Дополнительные сведения см. в разделе Выражения с условным оператором.)

std::nullptr_t

Ключевое слово nullptr является константой std::nullptr_t типа null-указателя, которая преобразуется в любой необработанный тип указателя. Дополнительные сведения см. в разделе nullptr .

Тип Boolean

Тип bool может иметь значения true и false . Размер bool типа зависит от реализации. Дополнительные сведения о реализации см. в разделе «Размеры встроенных типов «.

Символьные типы

Тип char — это тип представления символов, который эффективно кодирует элементы базового набора символов выполнения. Компилятор C++ обрабатывает переменные типа char , signed char и unsigned char как переменные разных типов.

Корпорация Майкрософт: переменные типа char по умолчанию действуют как int будто из типа signed char , если /J только не используется параметр компиляции. В этом случае они рассматриваются как тип unsigned char и повышаются до int без расширения знака.

Переменная типа wchar_t — это расширенный или многобайтовый тип символов. L Используйте префикс перед символом или строковым литералом, чтобы указать тип расширенных символов.

Корпорация Майкрософт: по умолчанию wchar_t — это собственный тип, но вы можете использовать /Zc:wchar_t- его для unsigned short определения wchar_t типа. __wchar_t — синоним для машинного типа wchar_t для систем Майкрософт.

Тип char8_t используется для представления символов UTF-8. Он имеет то же представление, что unsigned char и , но рассматривается как отдельный тип компилятором. Тип char8_t новый в C++20. Корпорация Майкрософт: для использования char8_t требуется /std:c++20 параметр компилятора или более поздней версии (например /std:c++latest , ).

Тип char16_t используется для представления символов UTF-16. Оно должно быть достаточно большим, чтобы представить любую единицу кода UTF-16. Он рассматривается как отдельный тип компилятором.

Тип char32_t используется для представления символов UTF-32. Оно должно быть достаточно большим, чтобы представить любую единицу кода UTF-32. Он рассматривается как отдельный тип компилятором.

Типы с плавающей запятой

Типы с плавающей запятой используют представление IEEE-754 для обеспечения приближения дробных значений по широкому диапазону величин. В следующей таблице перечислены типы с плавающей запятой в C++ и относительные ограничения на размеры типов с плавающей запятой. Эти ограничения являются обязательными стандартом C++ и не зависят от реализации Майкрософт. Абсолютный размер встроенных типов с плавающей запятой не указан в стандарте.

Тип Содержимое
float Тип float является наименьшим типом с плавающей запятой в C++.
double double — это тип с плавающей запятой, размер которого больше или равен размеру типа float , но меньше или равен размеру типа long double .
long double long double — это тип с плавающей запятой, размер которого больше или равен размеру типа double .

Корпорация Майкрософт: представление long double и double идентично. long double Однако и double рассматриваются как отдельные типы компилятором. Компилятор Microsoft C++ использует представления с плавающей запятой 4 и 8-байтов IEEE-754. Дополнительные сведения см. в представлении с плавающей запятой IEEE.

Целочисленные типы

Тип int — базовый целочисленный тип по умолчанию. Он может представлять все целые числа по определенному диапазону реализации.

Целочисленное представление со знаком — это одно из них, которое может содержать как положительные, так и отрицательные значения. Он используется по умолчанию или signed при наличии модификатора ключевое слово. Модификатор unsigned ключевое слово указывает неподписаемое представление, которое может содержать только неотрицательных значений.

Модификатор размера указывает ширину в битах используемого целочисленного представления. Язык поддерживает short и long long long модификаторы. Тип short должен быть не менее 16 бит ширины. Тип long должен быть не менее 32 битов ширины. Тип должен быть по крайней long long мере 64-разрядным. Стандарт задает связь размера между целочисленными типами:

Реализация должна поддерживать как минимальные требования к размеру, так и отношение размера для каждого типа. Однако фактические размеры могут отличаться между реализацией. Дополнительные сведения о реализации см. в разделе «Размеры встроенных типов «.

Ключевое слово int могут быть опущены при signed unsigned указании модификаторов размера или размера. Модификаторы и int тип, если они присутствуют, могут отображаться в любом порядке. Например, short unsigned и unsigned int short ссылаться на тот же тип.

Синонимы целочисленного типа

Следующие группы типов считаются синонимами компилятора:

Типы целых чисел, зависящие от Майкрософт, включают определенные ширины __int8 , __int16 __int32 а также __int64 типы. Эти типы могут использовать signed модификаторы и unsigned модификаторы. Тип данных __int8 аналогичен типу char , __int16 — типу short , __int32 — типу int , а __int64 — типу long long .

Размеры встроенных типов

Большинство встроенных типов имеют определенные реализацией размеры. В следующей таблице перечислены объем хранилища, необходимый для встроенных типов в Microsoft C++. В частности, long 4 байта даже в 64-разрядных операционных системах.

Тип Size
bool , char , char8_t , unsigned char , signed char , __int8 1 байт
char16_t , __int16 , short , unsigned short , wchar_t , __wchar_t 2 байта
char32_t , float , __int32 , int , unsigned int , long , unsigned long 4 байта
double , __int64 , long double , long long , unsigned long long 8 байт

Сведения о диапазоне типов данных см. в сводке по диапазону значений каждого типа.

Дополнительные сведения о преобразовании типов см. в разделе «Стандартные преобразования».

Чем отличаются функции начинающиеся с void от int в Си?

Первый вариант, по-хорошему, не должен бы компилироваться: сказано, что функция возвращает целое число, но ни одного return при этом в теле нет. main же случай особый, но его полная сигнатура по-хорошему включает возврат int (код выхода) и приём массива строк (аргументов командной строки) в виде числа элементов и указателя на нулевой из них. Но из-за исторически сложившегося разброда инструменты могут стерпеть и ряд других записей.

– user181100
2 апр 2018 в 20:54
Первый вариант не будет компилироваться.
2 апр 2018 в 20:55

void функции в Си соответствуют подпрограммам (исторически они появились до функций) в других языках. Попробуйте почитать в вике (по ссылкам). По сути разница в том, что основным назначением функции (по крайней мере к этому стоит стремиться) является возврат чистого результата, а подпрограммы — побочные эффекты

2 апр 2018 в 22:06

void-функция не возвращает значение. Вот и всё. Например, они могут что то изменять по ссылке, или отображать что то пользователю. С драйверами это вообще никак не связано.

Возврат функции, int/void в чём различие. C++?

Я использую функцию int, а не войд, значит он должен запоминать переменные после завершения из функции. Но этого не происходит. Может кто объяснить?
Я так понял, забегая вперёд, что изменить можно будет как-то благодаря указателям. Пока не углублялся, но меня больше сейчас волнует различие int и void. Ведь я думал, что void — это только визуальная функция, она ничего не возвращает (честно говоря, надеюсь, я до конца понимаю это слово), а благодаря int уже можно работать, как-то взаимодействовать с функцией.

  • Вопрос задан более трёх лет назад
  • 1127 просмотров

2 комментария

Простой 2 комментария

TosterModerator

Модератор @TosterModerator
Нарушение пункта 3.8 правил! Замените изображение текстом.
Евгений Шатунов @MarkusD Куратор тега C++

Скриншот — это по большей части второстепенное.

Скриншот — это дело уважения. Посмотри на ситуацию вот как.
Ты проявляешь уважение к своим собеседникам и не перегружаешь свой вопрос ненужной информацией. Скриншоты среды разработки — это очень сильная перегрузка информацией, с заведомо испорченным отображением текста — т.е. информации важной.
Еще твой вопрос могут читать люди с не очень хорошей линией интернета, через мобильное устройство или слабую публичную сеть, возможно в период плановых работ провайдера и перебоев с трафиком.
В ответ на уважение комментаторы тоже постараются проявить уважение к тебе даже если твой вопрос тянет на полное незнание основ используемого инструмента.

Есть еще один момент. Если ответ тебе действительно помог, отметь его как решение. Это никак не остановит будущие ответы и предложение иного столь же полезного решения для твоей ситуации.

Решения вопроса 1

GavriKos

За код скриншотом надо убивать ржавой секирой ужоса.

У вас там Int бесполезен по сути.
Мало того что вы никуда не присваиваете значение, которое возвращает функция, так еще и возвращаете постоянно ноль.

Конкретно в вашем случае — да, надо через указатели, потому что вы хотите модифицировать в функции переменные, переданные извне, да еще и больше одной.

Ответ написан более трёх лет назад
Нравится 6 5 комментариев

Kezzya

Kezzya @Kezzya Автор вопроса

Главный вопрос в чём различие int/void, когда надо возвращать 0, когда не надо? Скриншот — это по большей части второстепенное.

fzfx

Kezzya, int — функция обязана возвращать какое-либо значение типа int (например, 0), соответственно в ней должен быть ‘return’ и значение после него. void — функция не возвращает никакого значения, после ‘return’, если он имеется, не указывается никакого значения.
когда надо возвращать 0, когда не 0, а когда ничего — решает разработчик, закладывая в функцию определённый функционал.

Сергей Горностаев @sergey-gornostaev

Kezzya, int — целое число, void — ничто. Когда вам нужна вернуть число из функции — используете int. Когда ничего не нужно возвращать — void. Это описано в первых же главах любого учебника.

Kezzya

Kezzya @Kezzya Автор вопроса

Illia Nezhyhai, короче говоря, если мы работаем с целочисленными числами, чтобы потом использовать в главной функции, то используем int? Просто в данном случае, я же ввожу значение , а мне ничего не возвращается, так какая разница что у меня int тут написан, что void?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *