Вчера и сегодня пытался установить 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.
Поставь MS VS 2008 Express. Для олимпиад отлично подходит.
2008 можно скачать с Microsoft.com или где-то в другом месте надо искать? Думаю совет хороший — надюсь там не будет Windows 8 Tile application :)
В 2010 писал, все норм
http://www.visualstudio.com/ru-ru/downloads/download-visual-studio-vs#DownloadFamilies_4
Главное русскую версию не установить)
Я в 2013 не смог понять как сделать так, чтобы не закрывалась консоль при запуске по Ctrl+F5. Приходилось писать какой-нибудь getch() в конце программы, потому сам в 2008 пишу по старинке.
Да, про эту проблему тоже слышал — с закрывающейся консолью. Общее мнение — никак не решается, только хитростями типа того же getch().
В 2010 это проблема тоже присутствует — я сейчас в обед установил. Всё работает как хотелось только консоль закрывается. В принципе мелочи. А как это выглядит в 2008?
Это выглядит так (не в 2008 именно, а вообще): нажимаем Run -> Start without debugging, и окно с завершившейся программой не закрывается.
у меня так не работает
system("PAUSE");
?Тогда уж хотя бы
Решения есть, конечно работает, конечно не трудно добавить, но — КОСТЫЛЬ :)
Все сильно проще.
File -> New project -> Win32 Console Application -> Клацаем ОК -> В открывшемся окне клацаем на Application settings -> ставим галочку в Empty project.
В VS 2008-2013 работает, в остальных не пробовал.
Важный момент из-за которого у меня сразу не заработало — запускать надо по Ctrl-F5, если запускать по F5 (что я делал), то консоль всё равно закрывается. Спасибо за совет!
Качай Microsoft Visual Studio для Windows Desktop, и будет тебе счастье.
Или я что-то путаю и не понимаю, но почему нельзя 'передавать файлы в stdin' через freopen? Работает и в g++ и vs c++.
Изучу, спасибо. Подтверди если я правильно понимаю — эту строчку надо комментить при засылке на сервер, но это можно автоматизировать с помощью #ifndef ?
Это не ты, это я не понимаю — я на С++ последний раз что-то писал почти пятнадцать лет назад и это были не задачки для соревнования. Мне тогда вообще не нужно было ничего читать из файлов.
Понимаю, что вопросы глупые, но надо с чего-то начинать.
Можно professional студию через dreamspark получить, там всё на месте. UPD: Забыл что там студентом нужно быть или в универе работать, тогда да не подходит этот вариант.
Проще всего использовать связку Far manager + MinGW
Вот не проще всего
Ну по крайней мере мне так кажется, для обычных задач он пойдет. И не приходится загружать и устанавливать эти гиганты как Visual Studio. Правда, действительно приходится тратить время, чтобы настроить far под себя
Попробуйте Vim
Microsoft Visual Studio Express 2013 for Windows Desktop
Я сам пишу на плюсах под виндой. Лично я использую связку Notepad++ и MinGW, который я просто напросто взял и скопировал с Codeblocks. MinGW довольно неплохо справляется со всем, с чем мне приходилось сталкиваться. Notepad++ довольно гибкий — в нем есть и горячие клавиши и шаблоны(макросы), и, если погуглить, то можно настроить компиляцию плюсов как захочешь(с паузами, с файлами, с чем-угодно, хоть с Gtest'ом).
Но, многие говорят, что лучше всего для винды сделана Microsoft Visual Studio, и, если ты не хочешь потратить несколько часов на настройку Notepad++, то лучше используй ее.
Всем спасибо — остановился на Microsoft Visual C++ 2010 Express.
Пара комментариев по ответам:
Microsoft Visual Studio Express 2013 for Windows Desktop — тот самый зверь, где я не смог найти Win32 Console application. Может руки кривые.
Notepad++ — думаю лучше, чем Far, но хуже, чем полноценная IDE.
"Notepad++" -- думал, уже все на Sublime перешли.
Очень убогое решение проблемы. Очевидно, что код, скомпилированный в дебаг-режиме, работает медленнее (иногда асимптотически) кода, скомпилированного в релизе. А если Вы подключаете отладчик, вы замедляете работу еще сильнее.
Гораздо лучше выставить в настройках проекта
/SUBSYSTEM:CONSOLE
. Именно поэтому Fcdkbear выше посоветовал создавать проект типа "Консольное приложение Win32" и ставить галочку "Пустой проект" — в таком случае этот параметр выставляется автоматически.Да, я об этом не подумал. Спасибо за совет.
Даже асимптотически? Можно пример?
priority_queue
, например. В Visual Studio может происходить проверка валидности кучи после некоторых операций (полный список я не знаю).Всякие
lower_bound
вроде бы начинают проверять, что массив отсортирован. Думаю, что это еще и зависит от уровня отладки.Microsoft Visual Studio Express 2013 for Windows Desktop — тот самый зверь, где я не смог найти Win32 Console application.
Он там есть. Клик
Вероятно я скачал какую-то другую версию, что-нибудь типа for Windows 8. Поэтому там и были проекты под "Tiles".
Ещё один организационный вопрос — те, кто работают в Microsoft Visual Studio, как вы организуете своё "рабочее пространство"? Создавать под каждую задачку отдельный проект — слишком сложно. Писать решения в одном и том же файле, перебрасывая куда-нибудь после завершения — немного странно. Хранить все решения в одном проекте — не получится, так как void main() может быть только одна. Самому править makefile — тоже не уверен, что хорошее решение, видимо надо будет делать каждый раз, когда добавляешь новый файл.
Подскажите, пожалуйста, хороший способ?
Например сделать один проект-шаблон, и для каждой задачи скопировать папку с проектом-шаблоном, открыть его (.sln — файл) и в нём всё делать
Когда-то я писал в одном проекте, переименовывая старые main() в main0, main1(), main2()... Теперь просто не сохраняю коды.
У нас код в .h файлах и есть еще 1 цпп файл, в котором написано только #include "задача.h", между контестами старое удаляем.
Спасибо — по итогам нескольких дней этот подход мне понравился больше всего. Только старое я не удаляю, а создаю для него "Filters" в проекте Visual Studio по контестам (насколько я понял, это такой аналог папок, но настоящая папка на диске при этом не создаётся, все файлы всё равно свалены вместе).
Возможность запустить любое решение сделав один копи/пейст мне кажется оптимальной в этой ситуации.
Есть один проект. Для каждой задачи в нем создаем новый .cpp файл (Add New Item). Когда решили задачу, удаляем файл (Remove). Он удаляется только из проекта, но при этом лежит в той же папке. Если нужно снова вернуться к старой задаче, просто добавляем уже существующий файл (Add Existing Item).
Таким образом, в каждый момент времени в Source Files проекта есть только один .cpp файл.
Когда решаю один — создаю файлы A.txt, B.txt и так далее. И потом просто копипастой перемещаю код.
Когда в команде — делаем 1 проект-шаблон (обычно он называется задача "Z"), потом копируем его (всю папку целиком) сколько надо раз для каждой задачи. Из плюсов: можно открыть несколько студий и быстро переключаться между ними.
рекомендую QT Creator. Компилятор MSVC ставится автоматически, MinGW — опционально. Есть автодополнение кода, плагин для автоформатирования (по умолчанию выключен), отладка (CDB надо ставить отдельно отсюда, подхватится автоматически), рефакторинг (например, "переименовать символ под курсором"), поддержка Python.
Пользуясь случаем, спрошу: а можно в vs2013 собирать\отлаживать отдельный файл, а не целый проект? Ну то есть просто создать отдельно файлы A.cpp,B.cpp и т.д. и по отдельности с ними работать.
Хороший вопрос, судя по тем ответам, которые я пока получил — нельзя :(. VS заточен под большие проекты.