Ребёнок программирует.

Тема в разделе "WASM.BEGINNERS", создана пользователем Minzdrav, 12 сен 2018.

  1. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Уважаемые специалисты, помогите ребёнку разобраться:

    1. Что такое void? И зачем он нужен.

    2. Зачем int перед main?

    Вот ребёнок пишет:
    main ()
    int main ()
    int main (void)

    Во всех случаях работает одинаково. Но умный дядя ругался,
    что ребёнок пишет main (), вместо int main (void).
    А когда ребёнок спросил, - почему? Дядя ничего объяснить не смог, кроме
    каких-то спецификаторов типа, и других умных слов.

    Ребёнок долго читал Википедию, но ни х__ не понял.
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Шлите дядю нах. Можно писать как угодно.
    Вот только первый вариант на некоторых компиляторах при компиляции С++ стандарта (не чистый С) - работать не будет.
    Второй вариант верный. Означает что функция не имеет параметров. возвращает тип Int. Внутрь void можно не ставить. Это глупость.
    теперь по вопросам
    1) void - в основном придуман, чтоб иметь возможность делать указатели, не привязанные к определенному типу. Например void* data. Так же его можно использовать в возвращаемым значением функции - void main() это говорит о том, что функция не возвращает значения. Если рассмотреть вариант int main(void) то это эквивалентно int main() .

    2) любой тип перед именем функции говорит о возвращаемом значении. Однако в чистом С (ранних стандартах) если не указан тип, то считается что возвращается int. Современные компиляторы на такое дадут отлуп. Да и вообще это палки в колеса. Нужно строго контролировать возвращаемое значение.
     
    Minzdrav нравится это.
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Мариванна, вам по учебнику или как на самом деле было? От него сейчас нужна способность усваивать материал, пусть хотя бы как сказано делать научится. Кому надо повторять несколько раз, чтобы поняли? Дэбилам и дэбилам, считающим себя умней всех.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    это нормально, даже хорошо, если это отвлекает его от греховных мыслей... ведь библия не приветствует мастурбацию... даж онанизм был назван в честь Онана, сына Иуды... пусть лучше занимается программированием, чем плотскими утехами с самим собой...
     
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    Minzdrav, не понял я маленько юмора.. акий ребёнок ??? Ты сам прогать хочешь начать? ежель так, то говори прямо, что хочешь заняться сией глупостью :grin:
    с аких пор программирование отвлекает от греховных мыслей? :)
     
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
  7. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Самое полное определение main:
    Код (Text):
    1.  
    2. int main(int argc, const char **argv)
    3.  
    Функция возвращает значение типа int, которое впоследствии может быть проанализировано вызывающей программой (например, командной оболочкой). Принято, что в случае успешного выполнения программы функция main должна вернуть значение 0, а в случае ошибки - любое отличное от этого значение.
    argc - количество аргументов, передаваемых в программу.
    argv - указатель на начало массива Си-строк с перечнем аргументов, при этом нулевой аргумент всегда содержит имя файла вызываемой программы.
    Иными словами, программу можно вызвать из командной оболочки и передать аргументы, например так:
    Код (Text):
    1.  
    2. mount -t ext2 /dev/sd0 /mnt
    3.  
    В этом случае argc будет равен 5, а argv будет состоять из 5 элементов - "mount", "-t", "ext2", "/dev/sd0", "/mnt".
     
    Minzdrav и _edge нравится это.
  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    кстати, вопрос не по теме: ты используешь древнюю ext2 ???
     
  9. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Если только на /boot-разделе. Сейчас либо ext4, либо xfs.
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Minzdrav,

    Могли бы и просто задать вопрос, зачем придумывать ребёнка. Это ведь ничего не меняет.

    TermoSINteZ,

    > int main(void) то это эквивалентно int main() .

    Компиляторные фишки. Обычно используется PVOID как указатель на не определённую структуру. Сам же VOID это не ясно зачем нужно, это не нужный в языке компонент. Функция в любом случае вернёт значение, возможно оно дальше использоваться не будет, но зачем это помечать спец маркером, язык должен быть интерактивен, а не примитивен, что бы всякие мелочи описывать не нужные.
     
  11. skales007

    skales007 Member

    Публикаций:
    0
    Регистрация:
    9 янв 2018
    Сообщения:
    37
    Не совсем понял, почему обязательно вернёт? Понимаю что void может быть лишним, но функция же не обязана что-то возвращать. Мне вот лично с void было нагляднее. Единственное, что смущало, это void* - первое время не понимал (хоть и по глупости).
     
  12. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    skales007,

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

    skales007 Member

    Публикаций:
    0
    Регистрация:
    9 янв 2018
    Сообщения:
    37
    Indy_, действительно, даже не подумал, что значение в любом случае каким нибудь да будет. Тогда все встанет на свои места и, на мой взгляд void тем более нужен, чтоб не лезли куда не нужно. Но скорее всего это будет полезно в начале изучения, т.к. опытному программисту этого обьяснять не нужно)
     
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    skales007,

    Опытные используют типизацию всегда. Если это указатель, то он определяется не по размеру, а по типу pvoid. Так код становится читаем. Глупый кодер определит не тип, либо их вообще не использует, а размер параметра.
     
    UbIvItS и skales007 нравится это.
  15. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    да, языки программирования без жёсткой типизации есмь Зло. Но в силу их удобства для мелких задач они получили широкое распространение, а теперь сие Безобразие имеет место быть и в крупных проектах :)
     
  16. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    вы, друзья, еще хаскелл не видели, где каждая функция обязана что-то возвращать, игнорировать возвращенное значение нельзя, нет сайд-эффектов, а следовательно нет циклов, есть только рекурсия и всяческие монады, моноиды и тд, и структуры данных константные... после императивных языков программирования функциональные кажутся полной жестью...
     
    UbIvItS нравится это.
  17. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Это один из тех языков, который был придуман чтобы зарабатывать на обучении ему?
     
    _edge нравится это.
  18. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    ну лично мне кажется, что Хаскелл был придуман для всяческого математического задротства, чтобы программисты и математики с маленькими писюнами могли выделываться, программируя на нем... но есть вполне практичные функциональные языки программирования, как например Окамл, Фшарп или Елм... хотя в них само собой есть способы нагибать функциональщину за счет старого доброго императивного или объектно-ориентированного программирования, они не чисто функциональные, как Хаскелл...
     
  19. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Все мы дети Божьи...
     
  20. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    А как вообще, удобно функциональный код дебажится? А то мне при дебаге лямбд в Java убивать хочется всех, кто эти лямбды придумал.