Блог пользователя zholnin

Автор zholnin, 10 лет назад, По-русски

Вчера и сегодня пытался установить C++ под Windows. Попробовал три пакета, ни в одном не удалось добиться того, что мне нужно. Нужно мне совсем немного — Win32 Console Application, возможность подсовывать файл в stdin, и чтобы всё работало без проблем.

Eclipse Начал с Eclipse, так как пользую её для Python. Нашёл некий СDT C++ для Eclipse, установил. Компилятор в пакет не входил — начал искать компилятор. Вспомнил, что когда-то давно устанавливал Visual Studio — но не смог найти его у себя на диске. Почитал про GCC — не захотелось сразу заморачиваться с установкой MinGW, поэтому следующим пунктом стала установка Visual Studio Express.

Visual Studio Express Установил, выбираю новый проект -> C++. Вылезает список шаблонов. Вижу незнакомое слово XAML и кучу шаблонов про Windows Phone, Windows Tile Application и прочие навороты. Набираю в поиске Win32 Console Application — не найдено. Там есть ссылка на "магазин шаблонов" — захожу туда, опять ищу Win32 Console app — никакого эффекта. Попробовал один из имеющихся шаблонов — объём кода после нажатия ОК сразу превысил что-либо, что я когда-то писал на C++. Испугался.

Попытлся прикрутить микрософтовский компилятор к Eclipse — не получилось. Прочитал про Codeblocks — написано типа устанавливаешь и всё сразу работает, плюс в пакет включён компилятор.

Codeblocks

Установил. Попробовал тестовую програмку — работает. Супер. Попытался загнать файл в stdin — никак. Пробовал в Command line arguments писать всё, что только можно — < input.txt (так работает в консоли), < .\input.txt, < C:\полный путь\input.txt — результат ноль. И хотя в заголовке консоли написана вроде бы правильная строка запуска, приложение файл по stdin не видит, хоть умри.

Eclipse Eclipse сам увидел что у меня появился GCC и сам его подключил — меня это порадовало. Попробовал тестовую программу — не найден iostream. Хорошо. Нашёл все заголовочные файлы, прописал в Header paths для компилятора. Ошибка с include исчезла — вроде бы всё видит. Осталась ошибка — и при компиляции она тоже вылезает — undefined function fprint. Мучился долго, пытаясь научить Eclipse этой стандартной функции, но ничего не получилось — уже всё, что относится к C++, все пути где мог прописал, а ошибка никуда не девается.

Что имею в остатке (после где-то пяти часов):

  • Eclipse, который не признаёт fprint
  • Codeblocks, который работает, но отказывается передавать файлы в stdin
  • Microsoft Visual C++ Express, которые не понимает, зачем нужен Win32 Console и хочет чтобы я уже написал что-нибудь для Windows Phone.

Вопрос — может ли кто-нибудь что-нибудь порекомендовать? Я уже начинаю думать, что может быть забить на C++ и тренировать Java — она у меня с самого начала прекрасно работала в Eclipse. Второй вопрос — скажите мне, это я такой тупой, или что-то не то хочу от своего компьютера?

Да — я писал на C++ в 1997-2000 годах, с тех пор "в руки" не брал, потом был период PHP. В 2009-2010 игрался с Objective C++, потом изучал Java, но ничего большого на Java не написал. С 2012 года на Python — но в соревнованиях, где тайм лимит устанавливает в 1 секунд с Python трудно. Поэтому пытаюсь выбрать, к чему мне вернулся — к C++ или Java.

  • Проголосовать: нравится
  • +6
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится -13 Проголосовать: не нравится

Поставь MS VS 2008 Express. Для олимпиад отлично подходит.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    2008 можно скачать с Microsoft.com или где-то в другом месте надо искать? Думаю совет хороший — надюсь там не будет Windows 8 Tile application :)

    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      В 2010 писал, все норм

      http://www.visualstudio.com/ru-ru/downloads/download-visual-studio-vs#DownloadFamilies_4

      Главное русскую версию не установить)

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Я в 2013 не смог понять как сделать так, чтобы не закрывалась консоль при запуске по Ctrl+F5. Приходилось писать какой-нибудь getch() в конце программы, потому сам в 2008 пишу по старинке.

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Да, про эту проблему тоже слышал — с закрывающейся консолью. Общее мнение — никак не решается, только хитростями типа того же getch().

          В 2010 это проблема тоже присутствует — я сейчас в обед установил. Всё работает как хотелось только консоль закрывается. В принципе мелочи. А как это выглядит в 2008?

          • »
            »
            »
            »
            »
            »
            10 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Это выглядит так (не в 2008 именно, а вообще): нажимаем Run -> Start without debugging, и окно с завершившейся программой не закрывается.

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          system("PAUSE");?

          • »
            »
            »
            »
            »
            »
            10 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Тогда уж хотя бы

            #ifdef DEBUG
            system("pause");
            #endif
            
            • »
              »
              »
              »
              »
              »
              »
              10 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Решения есть, конечно работает, конечно не трудно добавить, но — КОСТЫЛЬ :)

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
            Проголосовать: нравится +9 Проголосовать: не нравится

          Все сильно проще.

          File -> New project -> Win32 Console Application -> Клацаем ОК -> В открывшемся окне клацаем на Application settings -> ставим галочку в Empty project.

          В VS 2008-2013 работает, в остальных не пробовал.

          • »
            »
            »
            »
            »
            »
            10 лет назад, # ^ |
              Проголосовать: нравится +5 Проголосовать: не нравится

            Важный момент из-за которого у меня сразу не заработало — запускать надо по Ctrl-F5, если запускать по F5 (что я делал), то консоль всё равно закрывается. Спасибо за совет!

»
10 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Качай Microsoft Visual Studio для Windows Desktop, и будет тебе счастье.

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +6 Проголосовать: не нравится

Или я что-то путаю и не понимаю, но почему нельзя 'передавать файлы в stdin' через freopen? Работает и в g++ и vs c++.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Изучу, спасибо. Подтверди если я правильно понимаю — эту строчку надо комментить при засылке на сервер, но это можно автоматизировать с помощью #ifndef ?

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

    Понимаю, что вопросы глупые, но надо с чего-то начинать.

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Можно professional студию через dreamspark получить, там всё на месте. UPD: Забыл что там студентом нужно быть или в универе работать, тогда да не подходит этот вариант.

»
10 лет назад, # |
  Проголосовать: нравится -12 Проголосовать: не нравится

Проще всего использовать связку Far manager + MinGW

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Вот не проще всего

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится -8 Проголосовать: не нравится

      Ну по крайней мере мне так кажется, для обычных задач он пойдет. И не приходится загружать и устанавливать эти гиганты как Visual Studio. Правда, действительно приходится тратить время, чтобы настроить far под себя

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Я сам пишу на плюсах под виндой. Лично я использую связку Notepad++ и MinGW, который я просто напросто взял и скопировал с Codeblocks. MinGW довольно неплохо справляется со всем, с чем мне приходилось сталкиваться. Notepad++ довольно гибкий — в нем есть и горячие клавиши и шаблоны(макросы), и, если погуглить, то можно настроить компиляцию плюсов как захочешь(с паузами, с файлами, с чем-угодно, хоть с Gtest'ом).

Но, многие говорят, что лучше всего для винды сделана Microsoft Visual Studio, и, если ты не хочешь потратить несколько часов на настройку Notepad++, то лучше используй ее.

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Всем спасибо — остановился на Microsoft Visual C++ 2010 Express.

Пара комментариев по ответам:

  • я люблю полноценные IDE, так как есть дурная привычка потрейсить программку и посмотреть что в какие переменых содержится. Знаю, отладчики работают в командной строке, но для меня это слишком hardcore
  • от исчезающей консоли избавился установкой breakpoint на последнюю скобку } main()
  • Far manager как способ редактирования я использовал для Octave и PHP, жить можно, но на грани hardcore на мой вкус. А так Far manager люблю, хотя коллеги и пугаются, когда видят его. Особо опытные и достаточно взрослые с ужасом спрашивают — "У тебя что, ДОС??"
  • Microsoft Visual Studio Express 2013 for Windows Desktop — тот самый зверь, где я не смог найти Win32 Console application. Может руки кривые.

  • Notepad++ — думаю лучше, чем Far, но хуже, чем полноценная IDE.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    "Notepad++" -- думал, уже все на Sublime перешли.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    от исчезающей консоли избавился установкой breakpoint на последнюю скобку } main()

    Очень убогое решение проблемы. Очевидно, что код, скомпилированный в дебаг-режиме, работает медленнее (иногда асимптотически) кода, скомпилированного в релизе. А если Вы подключаете отладчик, вы замедляете работу еще сильнее.

    Гораздо лучше выставить в настройках проекта /SUBSYSTEM:CONSOLE. Именно поэтому Fcdkbear выше посоветовал создавать проект типа "Консольное приложение Win32" и ставить галочку "Пустой проект" — в таком случае этот параметр выставляется автоматически.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Да, я об этом не подумал. Спасибо за совет.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Даже асимптотически? Можно пример?

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        priority_queue, например. В Visual Studio может происходить проверка валидности кучи после некоторых операций (полный список я не знаю).

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Всякие lower_bound вроде бы начинают проверять, что массив отсортирован. Думаю, что это еще и зависит от уровня отладки.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Microsoft Visual Studio Express 2013 for Windows Desktop — тот самый зверь, где я не смог найти Win32 Console application.

    Он там есть. Клик

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Вероятно я скачал какую-то другую версию, что-нибудь типа for Windows 8. Поэтому там и были проекты под "Tiles".

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Ещё один организационный вопрос — те, кто работают в Microsoft Visual Studio, как вы организуете своё "рабочее пространство"? Создавать под каждую задачку отдельный проект — слишком сложно. Писать решения в одном и том же файле, перебрасывая куда-нибудь после завершения — немного странно. Хранить все решения в одном проекте — не получится, так как void main() может быть только одна. Самому править makefile — тоже не уверен, что хорошее решение, видимо надо будет делать каждый раз, когда добавляешь новый файл.

Подскажите, пожалуйста, хороший способ?

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Например сделать один проект-шаблон, и для каждой задачи скопировать папку с проектом-шаблоном, открыть его (.sln — файл) и в нём всё делать

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Когда-то я писал в одном проекте, переименовывая старые main() в main0, main1(), main2()... Теперь просто не сохраняю коды.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    У нас код в .h файлах и есть еще 1 цпп файл, в котором написано только #include "задача.h", между контестами старое удаляем.

    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Спасибо — по итогам нескольких дней этот подход мне понравился больше всего. Только старое я не удаляю, а создаю для него "Filters" в проекте Visual Studio по контестам (насколько я понял, это такой аналог папок, но настоящая папка на диске при этом не создаётся, все файлы всё равно свалены вместе).

      Возможность запустить любое решение сделав один копи/пейст мне кажется оптимальной в этой ситуации.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Есть один проект. Для каждой задачи в нем создаем новый .cpp файл (Add New Item). Когда решили задачу, удаляем файл (Remove). Он удаляется только из проекта, но при этом лежит в той же папке. Если нужно снова вернуться к старой задаче, просто добавляем уже существующий файл (Add Existing Item).

    Таким образом, в каждый момент времени в Source Files проекта есть только один .cpp файл.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Когда решаю один — создаю файлы A.txt, B.txt и так далее. И потом просто копипастой перемещаю код.

    Когда в команде — делаем 1 проект-шаблон (обычно он называется задача "Z"), потом копируем его (всю папку целиком) сколько надо раз для каждой задачи. Из плюсов: можно открыть несколько студий и быстро переключаться между ними.

»
10 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

рекомендую QT Creator. Компилятор MSVC ставится автоматически, MinGW — опционально. Есть автодополнение кода, плагин для автоформатирования (по умолчанию выключен), отладка (CDB надо ставить отдельно отсюда, подхватится автоматически), рефакторинг (например, "переименовать символ под курсором"), поддержка Python.

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Пользуясь случаем, спрошу: а можно в vs2013 собирать\отлаживать отдельный файл, а не целый проект? Ну то есть просто создать отдельно файлы A.cpp,B.cpp и т.д. и по отдельности с ними работать.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Хороший вопрос, судя по тем ответам, которые я пока получил — нельзя :(. VS заточен под большие проекты.