![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
archimed7592 |
|
||||||||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Очень часто задают вопрос типа такого
Что же такого в современных компиляторах? Да собственно ничего особенного, просто они начали более полно соответствовать Стандарту. Итак, устаревшие источники в виде некоторых книг и преподавателей предлагают вам написать и откомпилировать следующую программу(так писать неправильно):
Visual Studio 2005 и выше(к примеру) откажется компилировать эту программу выдав следующее сообщение:
Вот правильный вариант программы:
Отличия: во-первых, это подключение заголовочного файла iostream вместо iostream.h(этого требует Стандарт), во-вторых, это использование пространства имён std т.к. почти все сущности из стандартной библиотеки теперь располагаются в этом пространстве имён. Более подробно: 1. Стандартные заголовочные более не имеют окончания .h. Т.е. теперь должно подключать fstream, ostream, vector, string и т.д. 1а. Стандартные заголовочные файлы из языка С(не С++) также более не имеют окончания .h, но имеют приставку 'c': cmath, cstdio, cstdlib и т.д. Примечание: помимо этого все ф-ции из этих заголовочных файлов языка С также теперь находятся в пространстве имён std, т.е. теперь нужно писать std::printf, std::strcpy и т.д. 2. Пространство имён std. Все сущности из стандартной библиотеки теперь находятся в нём. Сделано это для того, чтобы они не конфликтовали с вашими сущностями(из-за совпадения имён). Если Вы не хотите постоянно приписывать std::, то есть два варианта как этого избежать:
К слову, подключение посредством using или using namespace категорически не рекомендуется делать внутри своих заголовочных файлов. Также не рекомендуется делать это и внутри модулей(.cpp). Самый правильный вариант - это подключение имён уровня ф-ции, причём, рекомендуется подключать только необходимые имена:
Назад к FAQ Это сообщение отредактировал(а) bsa - 26.7.2011, 10:59 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||||||||
|
|||||||||||||
Igor_K |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Кажись у тебя ошибка. Всюду написано:
тут походу имеется ввиду
Это сообщение отредактировал(а) Igor_K - 9.4.2008, 11:59 |
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Ага, пасип
![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
Всё хорошо, только предлагаю заменить "инжект" на "включение" или "вставка".
|
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Я думал о том, что термин неудачный, но "вставка" мне нравится ещё меньше
![]() Может кто догадается, как правильно это по русски обозвать, чтобы дико не звучало? -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
получать доступ к сущностям пространства имен ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Длинно и непонятно
![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
opjox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 2 Всего: 14 |
Может быть "подключение"?
|
|||
|
||||
jenek28 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 4.4.2008 Репутация: -2 Всего: -2 |
в конце допиши return 0;
и всё будет работать |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Спасибо, дорогой, а то у меня до этого не работало ![]() Если уж на то пошло, то писать нужно return EXIT_SUCCESS, но это эквивалентно return 0, а по стандарту, если ф-ция main не возвращает значения, то неявно подставляется возвращение нуля(implicit return 0), так что, если компилятор требует написания return 0 - это свидетельствует о его несовременности ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
arkeyn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.4.2008 Репутация: нет Всего: нет |
у меня c++ builder 6
никак немогу написать консольное приложение под дос, перепробывал выше приведенное, компилирует и материться что нету ДЛЛки ХЕЛП!!! или скажите плз где норм компилятор скачать, ![]() ![]() Добавлено через 4 минуты и 27 секунд cc3260.dll вот этот найти не может |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
arkeyn, см. здесь: http://forum.vingrad.ru/index.php?show_typ...showtopic=49632
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
arkeyn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.4.2008 Репутация: нет Всего: нет |
ладно, много слишком всего. У меня есть книга там описываеться С++ но только вот мне нужен стабильный компилятор, !!рабочий!! вижу что там всего много, какой именно посоветуеш закачать что бы там безпроблем можна было приложения под дос писать по книжке и желательно что бы потом чтото под виндовс писать тоже можно было. спб |
|||
|
||||
Akeem |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 14.7.2006 Где: Киев/Украина Репутация: нет Всего: 3 |
Странно, что только сейчас об этом заговорили.
Уже как 4 года говорят о том что все функции ввода/вывода находятся в std и что следует писать программу так
-------------------- Мир огромен и мы только муравьи в нём! (С) formicha |
|||
|
||||
arkeyn |
|
||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.4.2008 Репутация: нет Всего: нет |
всеравно неработает, какой вы компилятор юзаете? ![]() посоветуйте компил нормальный что бы с формами можна было и под дос работал ато в моет c++ builder 6 нехватает библиотек какихто все время, уже достало впрям ![]() ![]() ![]() |
||||
|
|||||
Akeem |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 14.7.2006 Где: Киев/Украина Репутация: нет Всего: 3 |
Юзал 6 Билдер который был поставлен на ХР
Также юзал ВС 2005 Одно средство есть чтобы сделать так чтобы все работало -- переставить билдер. Советую ставить все что хочет поставить установщик вместе с самим билдером + сохранить сам диск на винте. -------------------- Мир огромен и мы только муравьи в нём! (С) formicha |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Смотря что под ДОСом понимать. Если именно ДОС, то не посоветую ничего(и вряд ли кто посоветует). Если ты имеешь ввиду консольные приложения, то посоветую Visual C++ 2008 Express.
4 года говорят и, тем не менее, с завидной регулярностью спрашивают "а почему ... ?". Собственно говоря, см. прибитую к потолку тему "Пишем ФАК". -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Неплохо былобы написать int main(){...} Это если rturn 0; а типа у мэйна нет. |
||||||
|
|||||||
Suertero-E |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 29.12.2006 Где: Узбекистан/Ташкен т Репутация: нет Всего: нет |
Если я не ошибаюсь то правильным будет заключать
внутри
Тогда при написании большого кода с разными библиотеками не будут проблемы. Таким вот способом:
Это сообщение отредактировал(а) Suertero-E - 12.9.2009, 18:05 |
||||||||
|
|||||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Начинание, конечно, правильное, но сам подход не совсем соответсвует случаю. Во-первых, данный топик создавался с целью избежать вопросов "памагите, ашипка (реальная причина: iostream.h или отсутсвие квалификации std" (или, в крайнем случае, отсылать в этот топик задающих подобные вопросы). Т.е. целевой контингент "совсем новичек", которому ещё рано заморачиваться тем, чтобы в каждой функции писать using namespace std (да, кстати, "в этом нет никакого смысла" (с) Король вечеринок), а если он этого писать не будет, то следующим же вопросом он создаст тему "памагите, ашипка (реальная причина: в main есть using, в другой ф-ции using'а нет)", чего тоже хотелось избежать. Ну а, во-вторых, если иметь чёткое понимание что именно и где имеено ты пишешь, то using внутри ф-ции только обременит читабельность кода когда в реальности не даст абсолютно ничего. using внутри ф-ции необходимо делать только тогда, когда пишешь ф-ции внутри заголовочного файла (как часто бывает с шаблонными ф-циями, к примеру). Другими словами, когда ты в main.cpp пишешь using namespace std; это не означает, что все имена из std во время компоновки будут переведены в глобальное пространство имён, это лишь помогает компилятору на этапе компиляции найти нужное имя и поставить полностью квалифицированную ссылку на это имя, т.е. никаких ошибок компоновки этот способ не добавит. Что же касается перекрытия имён - когда пишешь "большой код с разными библиотеками" крайне не рекомендуется делать модули длинее 200-400 строк ( примерно 10-20 функций в модуле ), а соответсвенно, случайно перекрыть имя среди этих 10-20 ф-ций будет крайне проблематично. Другое дело, заголовочные файлы - там, конечно, using namespace для собственного удобства внутри namespace-scope писать категорически не рекомендуется. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Fatkh |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 5.9.2009 Репутация: 1 Всего: 1 |
А о каком Стандарте речь? ISO/IEC 14882:1998? Если да, то тут написан бред. В нем не запрещено ипользовать хидеры с окончанием .h. Стандарты читать надо. И НИКОГДА в плюсах не будет запрещено их использование, т.к. Страуструп и прочие адепты из кожи вон лезут, добиваясь совместимости сишных прог с плюсовым стандартом (хоть у них это и не получается), чтобы как можно больше сишников мигрировали на плюсы. И нет никакого смысла убивать совместимость (пусть частичную). Это никому не надо. И не могли бы вы показать строчку стандарта, где написано, что код возврата из main без (return smth) есть 0? Я таковой не нашел. Более того, в сишном стандарте это undefined behavior. Боюсь, что в плюсах так же, хотя утверждать не берусь. |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Это сообщение отредактировал(а) mes - 12.9.2009, 21:34 |
||||
|
|||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Вообще говоря, я эту строчку читал в second edition, то бишь в 14882:2003, но не исключаю, что в 1998 написано то же самое.
Уважаемый, так Вы же бред и пишите... Где в процитированном Вами куске моего поста написано, что стандарт запрещает использовать хидеры с окончанием .h? Действительно ![]() Здесь написана такая же очевидная истина, как вроде этой: "Буква А - первая буква в алфавите". -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Fatkh |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 5.9.2009 Репутация: 1 Всего: 1 |
Прошу прощения, невнимательно прочитал пост. Спасибо.
Каюсь - полностью прочитал лишь 2 сишных стандарта, стандарт плюсов только местами. |
||||
|
|||||
serghd |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Почему же,
прекрасно компилится несмотря на ".h". Т.е. не указано, что можно писать именно обоими способами, а не только без ".h". Это сообщение отредактировал(а) serghd - 3.1.2011, 04:57 |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а почему не должно компилиться если у вас есть подходящий файл stdio.h ? во первых это не одно и то же.. во вторых далеко не всегда возможно.. |
|||
|
||||
Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Мне кажется на языке С тоже надо привести консольную программу для
избежания ненужных вопросов:
Использованы: 1) пакет компиляторов MinGW; 2) среда Code::Blocks. Это сообщение отредактировал(а) Modul - 9.1.2011, 19:27 --------------------
I'll be back ! |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
так вот этот момент и надо было описать как полагается, а не отрезать: "Стандартные заголовочные файлы из языка С(не С++) также более не имеют окончания .h, но имеют приставку 'c': cmath, cstdio, cstdlib и т.д.". Я же поэтому и пример специально с ".h", а не с cstdio привёл! Это сообщение отредактировал(а) serghd - 3.1.2011, 17:31 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Идем читать современную книгу по языку C!!! И советую о void main() забыть навсегда!
|
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
что-то из этого враки ![]() |
|||
|
||||
Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Да, увлекся по аналогии с обычной функцией, ничего не возвращающей. Оставим один вариант. --------------------
I'll be back ! |
|||
|
||||
skyfly666 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.1.2011 Где: Украина Херсон Репутация: нет Всего: нет |
Ох сколько обсуждений из за такой маленькой программы
![]() я бы писал вот так
мне так проще, просто подключить пару библиотек. В общем кому как ![]() Хотя смотря у кого какой компилятор. |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
skyfly666, бегом читать книжку по С. Чтобы не говорить глупостей про библиотеки
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |