Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Среда разработки С++ (https://javascript.ru/forum/offtopic/38464-sreda-razrabotki-s.html)

PashPP 02.06.2013 23:46

Среда разработки С++
 
Вот так вот, решил ознакомиться с сим языком и дилемма.
Пока нужна возможность только писанины чистого си, пока даже консольного, но с гуи билдером желательно каким-то. Основные требования - няшность и удобный отладчик.
Пробовал визуал студию - норм, но все равно что-то не то.
Коде::блок - лучше, но как-то душа не лежит. И в отладчике почему-то не останавливается на брейкпоинтах.
Кюти билдер - выглядит оче ок, но я пока не понимаю зачем. А еще его хрен настроишь, еле прикрутил к нему компилятор, но отладчик все равно не работает.

Пока хочу добить кютибилдер. Но надо ли он мне? Там вообще можно на С++ ванильном писать и билдить его, чтоб на других пеко запустилось?

PashPP 03.06.2013 00:26

Хм. Только донастраивал кюти билдер, неплохо.
Правда почему там пустые переменые и мыссивы в отладчике показываются со случайными значениями?

monolithed 03.06.2013 02:07

Цитата:

Сообщение от PashPP
Пробовал визуал студию - норм, но все равно что-то не то.

Что не то?

Цитата:

Сообщение от PashPP
Пока хочу добить кютибилдер. Но надо ли он мне?

Если требуется писать кроссплатформенные GUI, то есть смысл рассмотреть Qt.
Если только под win, то VS + WPF, под Mac Xcode или AppCode.

Но вплане изучения языка не советую забивать Qt голову.

Да кстати почему С, а не С++?

Сейчас я использую AppCode, лучше пока не встречал.
Хотя в основном приходится писать код в консольном vim'e )

Цитата:

Сообщение от PashPP
Правда почему там пустые переменые и мыссивы в отладчике показываются со случайными значениями?

Размер занимаемой памяти для конкретной архитектуры


PS: начни с vim + g++/clang++ + make + книги (Страуструп, Мейерс, Элджер, Седжвик, Дьюхерст)

monolithed 04.06.2013 13:55

Цитата:

Сообщение от Дзен-трансгуманист
В текущих может оставаться мусор

К примеру, если я напишу:
const foo *i = &bar;

то IDE никаким образом не будет знать (если не в режиме отладки), какое значение хранит переменная (если это мусор) или на какую ячейку памяти она ссылается.

Поэтому я предположил что скорее всего имеется ввиду размер занимаемой памяти для конкретной архитектуры:

const std::size_t size = std::sizeof(foo);

DjDiablo 05.06.2013 04:11

Может немного не в тему, но есть такие штуки, как компиляторы онлайн. Софтину серьёзную ненапишеш, но поиграться в целях обучения очень даже прикольно.

programr

Куча демок которые можно запускать и редактировать, куча языков и платформ. Демки разбиты по темам, проилюстрированы все основные возможности языка.

главная
http://www.programr.com/
С++
http://www.programr.com/zone/cpp
<iframe src='http://www.programr.com/embed.php?action=tf&path=demostudent//view/temp_1370396448/Example.cpp' width='100%' height='700' frameborder='0'></iframe>


Что понравилось,на ресурсе дак это то что есть возможность мучить пробные приложения для IOS и Android, и что самое главное запускать.
сначало compile потом run (вдруг первый раз компилятор кто увидел :) )
<iframe src='http://www.programr.com/embed.php?action=tf&path=demostudent/view/temp_1370397379/Example_1363180033291' width='100%' height='700' frameborder='0'></iframe>


www.compileonline.com
А вот здесь больше языков, но без демок. Зато можно пощупать всякую экзотику и ископаемых типо Ada или Algol-68
Сайт
http://www.compileonline.com/
ссылка на С++
http://www.compileonline.com/compile_cpp_online.php

monolithed 05.06.2013 12:32

Цитата:

Сообщение от DjDiablo
Софтину серьёзную ненапишеш, но поиграться в целях обучения очень даже прикольно.

Для изучения этого языка абсолютно бесполезные вещи.
Основное назначение таких сервисов как liveworkspace.org, codepad.org это дать возможность быстро проверить ту или иную особенность языка или просто создать демонстрационный пример для кого-то другого.

DjDiablo 05.06.2013 13:43

Цитата:

возможность быстро проверить ту или иную особенность языка
Это тоже часть обучения

Но вообще не знаю, я не по ним учился :)

monolithed 05.06.2013 14:34

Цитата:

Сообщение от DjDiablo
Это тоже часть обучения

К сожалению процесс изучения С++ не поддается никакой логике, тут либо у тебя есть лет 5-10 на запоминание особенностей языка либо нет

DjDiablo 06.06.2013 03:03

ну ты перегнул насчёт пяти лет помоему.
Что касается основных конструкций то их можно ну скажем за неделю выучить.

Потом месяцами будешь забывать, путаться, заглядывать в справочник. Но это пройдёт, и спустя какое то время можно начать писать вполне уверенно.

Неплохо решать типовые задачи, тогда станет ясно где и что уместно применять.

Для продакшн конечно придётся в библиотеках разбираться в том же MFC хотя бы.

Ну а что касается написание сложных программ, то этот навык не привязан к языку. Если можешь написать большое приложение на javascript то сможешь и на C++. Обретение этого навыка состоит из изучения программной инженерии, эксперементов и изучения чужих исходников.

Так что я несогласен с отсутствием логики.

Да и Qt для JS программиста не самый плохой выбор, с учётом того насколько активно там применяется html и Js.
Программу потом можно будет собрать под windows, linux, и macOS.
C 5й версии приложения можно запускать на андроид
а с 5.2 (осень 2013) на IOS

Хотя конечно решение принимать надо с оглядкой на рынок, c оглядкой на количество QT вакансий.

monolithed 06.06.2013 18:59

Цитата:

Сообщение от DjDiablo
ну ты перегнул насчёт пяти лет помоему.

Если:
Цитата:

Сообщение от DjDiablo
касается основных конструкций то их можно ну скажем за неделю выучить.

Конечно можно и за год нахвататься опыта, но на изучение тонкостей языка и компиляторов уйдут годы. Вспомни только работу с фасетами, тредами, локалями, потоками и STL .

к примеру финт с потоками:

struct log final : public std::ostream {
	public:
		explicit log(const std::string &type, const std::string &file = "") :
			std::ostream(new buffer(type, file)) {}
		;

		~log() {
			delete std::ostream::rdbuf();
		}

	private:
		struct buffer final : public std::stringbuf {
			public:
				explicit buffer(const std::string &type, const std::string &file) :
					type (type), file (file) {}
				;

				~buffer() {
					std::streambuf::pubsync();
				}

				virtual int sync();

			private:
				const std::string type, file;
			}
		;

		log(const log&) = delete;
		const log& operator=(const log&) = delete;
	}
;


Использую для того чтобы писать красиво в лог:

using LOG_INFO = ::log;
LOG_INFO ("error", (*error)->name) << "file: " << (*file)->name;

Или еще пример:

template <typename T>
struct find_equal : std::binary_function <T, T, bool>
{
	find_equal(const T &value) : value(value) {};

	bool operator()(const T &left, const T &right) const {
		return left == value && right == value;
	}

	private:
		T value;
};

Используется как предикат:
file.erase(std::unique(file.begin(), file.end(), ::find_equal<char>(' ')), file.end());

Хотя сейчас std::binary_function <...> deprecated, потому что можно писать так:

file.erase(std::unique(file.begin(), file.end(), [](const char &left, const char &right) {
     return left == value && right == value;
}), file.end());


Попробуй все это объяснить новичку.
Даже на самый простой вопрос чем отличаются union, struct, class не каждый ответит, особенно если не читал С++11, к примеру:

union __union final {
    const int i;
};
 
using foo = const union ::__union;
foo un = { .i =  0 };

std::cout << un.i << std::endl; // 0


Пруф

Ну и на последок прикоюха с перечислениями:
enum __enum : int { value = 0 };
std::cout << __enum.value << std::endl; // 0


Пруф

Цитата:

Сообщение от DjDiablo
Для продакшн конечно придётся в библиотеках разбираться в том же MFC хотя бы.

MFC, WF, WPF, Qt и пр. boost-подобные библиотеки это уже отдельная история.

Цитата:

Сообщение от DjDiablo
Так что я несогласен с отсутствием логики.

Ну к примеру по какой такой логике имя функции нужно оборачивать в круглые скобки:

void *(*foo)(int *);


Я понимаю если бы там было бы обращение к другим членам класса типа:
(*parent)->method.property


Ну или здесь:

using buffer = std::istreambuf_iterator<char>;
content.assign((buffer(file)), buffer());


Сейчас я понимаю почему это сделано так, но это нужно еще принять )

Или вот приколюха из нового стандарта:
i++++++++++; // i += 5;


Ну или вместо того чтобы добавить std::lexical_cast<...>() они добавили:

stoi, stol, stoll, stoul, stoull, stof, stod, stold, to_string, to_wstring к имеющимся strtod, strtold, strtof, strtoul, strtoull, trtol, strtoll, atoi, atol, atoll

спрашивается нафига?


Часовой пояс GMT +3, время: 02:53.