Уважаемые специалисты, помогите ребёнку разобраться: 1. Что такое void? И зачем он нужен. 2. Зачем int перед main? Вот ребёнок пишет: main () int main () int main (void) Во всех случаях работает одинаково. Но умный дядя ругался, что ребёнок пишет main (), вместо int main (void). А когда ребёнок спросил, - почему? Дядя ничего объяснить не смог, кроме каких-то спецификаторов типа, и других умных слов. Ребёнок долго читал Википедию, но ни х__ не понял.
Шлите дядю нах. Можно писать как угодно. Вот только первый вариант на некоторых компиляторах при компиляции С++ стандарта (не чистый С) - работать не будет. Второй вариант верный. Означает что функция не имеет параметров. возвращает тип Int. Внутрь void можно не ставить. Это глупость. теперь по вопросам 1) void - в основном придуман, чтоб иметь возможность делать указатели, не привязанные к определенному типу. Например void* data. Так же его можно использовать в возвращаемым значением функции - void main() это говорит о том, что функция не возвращает значения. Если рассмотреть вариант int main(void) то это эквивалентно int main() . 2) любой тип перед именем функции говорит о возвращаемом значении. Однако в чистом С (ранних стандартах) если не указан тип, то считается что возвращается int. Современные компиляторы на такое дадут отлуп. Да и вообще это палки в колеса. Нужно строго контролировать возвращаемое значение.
Мариванна, вам по учебнику или как на самом деле было? От него сейчас нужна способность усваивать материал, пусть хотя бы как сказано делать научится. Кому надо повторять несколько раз, чтобы поняли? Дэбилам и дэбилам, считающим себя умней всех.
это нормально, даже хорошо, если это отвлекает его от греховных мыслей... ведь библия не приветствует мастурбацию... даж онанизм был назван в честь Онана, сына Иуды... пусть лучше занимается программированием, чем плотскими утехами с самим собой...
Minzdrav, не понял я маленько юмора.. акий ребёнок ??? Ты сам прогать хочешь начать? ежель так, то говори прямо, что хочешь заняться сией глупостью с аких пор программирование отвлекает от греховных мыслей?
Самое полное определение main: Код (Text): int main(int argc, const char **argv) Функция возвращает значение типа int, которое впоследствии может быть проанализировано вызывающей программой (например, командной оболочкой). Принято, что в случае успешного выполнения программы функция main должна вернуть значение 0, а в случае ошибки - любое отличное от этого значение. argc - количество аргументов, передаваемых в программу. argv - указатель на начало массива Си-строк с перечнем аргументов, при этом нулевой аргумент всегда содержит имя файла вызываемой программы. Иными словами, программу можно вызвать из командной оболочки и передать аргументы, например так: Код (Text): mount -t ext2 /dev/sd0 /mnt В этом случае argc будет равен 5, а argv будет состоять из 5 элементов - "mount", "-t", "ext2", "/dev/sd0", "/mnt".
Minzdrav, Могли бы и просто задать вопрос, зачем придумывать ребёнка. Это ведь ничего не меняет. TermoSINteZ, > int main(void) то это эквивалентно int main() . Компиляторные фишки. Обычно используется PVOID как указатель на не определённую структуру. Сам же VOID это не ясно зачем нужно, это не нужный в языке компонент. Функция в любом случае вернёт значение, возможно оно дальше использоваться не будет, но зачем это помечать спец маркером, язык должен быть интерактивен, а не примитивен, что бы всякие мелочи описывать не нужные.
Не совсем понял, почему обязательно вернёт? Понимаю что void может быть лишним, но функция же не обязана что-то возвращать. Мне вот лично с void было нагляднее. Единственное, что смущало, это void* - первое время не понимал (хоть и по глупости).
skales007, Физически функция возвращает управление, просто в каком то конкретном случае значение не определено и есть тот самый войд. Это всё скриптовые конструкции, нужно помнить что скрипт лишь способ описания, он выполняется каким то образом и значение возвращаемое есть всегда.
Indy_, действительно, даже не подумал, что значение в любом случае каким нибудь да будет. Тогда все встанет на свои места и, на мой взгляд void тем более нужен, чтоб не лезли куда не нужно. Но скорее всего это будет полезно в начале изучения, т.к. опытному программисту этого обьяснять не нужно)
skales007, Опытные используют типизацию всегда. Если это указатель, то он определяется не по размеру, а по типу pvoid. Так код становится читаем. Глупый кодер определит не тип, либо их вообще не использует, а размер параметра.
да, языки программирования без жёсткой типизации есмь Зло. Но в силу их удобства для мелких задач они получили широкое распространение, а теперь сие Безобразие имеет место быть и в крупных проектах
вы, друзья, еще хаскелл не видели, где каждая функция обязана что-то возвращать, игнорировать возвращенное значение нельзя, нет сайд-эффектов, а следовательно нет циклов, есть только рекурсия и всяческие монады, моноиды и тд, и структуры данных константные... после императивных языков программирования функциональные кажутся полной жестью...
ну лично мне кажется, что Хаскелл был придуман для всяческого математического задротства, чтобы программисты и математики с маленькими писюнами могли выделываться, программируя на нем... но есть вполне практичные функциональные языки программирования, как например Окамл, Фшарп или Елм... хотя в них само собой есть способы нагибать функциональщину за счет старого доброго императивного или объектно-ориентированного программирования, они не чисто функциональные, как Хаскелл...
А как вообще, удобно функциональный код дебажится? А то мне при дебаге лямбд в Java убивать хочется всех, кто эти лямбды придумал.