Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Современный "hello world", или как написать первую, программу на современном компиляторе 
:(
    Опции темы
archimed7592
Дата 9.4.2008, 11:46 (ссылка) |    (голосов:11) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Очень часто задают вопрос типа такого
Цитата
В книге приведён пример программы, но она у меня не компилируется, что мне делать?
Связано это с тем, что много книг с некоторых пор сильно устарели. Также устарели познания преподавателей, которые с тем же успехом учат вещам, которые не работают на современных компиляторах.

Что же такого в современных компиляторах? Да собственно ничего особенного, просто они начали более полно соответствовать Стандарту.

Итак, устаревшие источники в виде некоторых книг и преподавателей предлагают вам написать и откомпилировать следующую программу(так писать неправильно):
Код

#include <iostream.h>

int main()
{
    cout << "Hello world!" << endl;
}


Visual Studio 2005 и выше(к примеру) откажется компилировать эту программу выдав следующее сообщение:
Код

fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory


Вот правильный вариант программы:
Код

#include <iostream>

int main()
{
    std::cout << "Hello world!" << std::endl;
}


Отличия: во-первых, это подключение заголовочного файла iostream вместо iostream.h(этого требует Стандарт), во-вторых, это использование пространства имён std т.к. почти все сущности из стандартной библиотеки теперь располагаются в этом пространстве имён.

Более подробно:
1. Стандартные заголовочные более не имеют окончания .h. Т.е. теперь должно подключать fstream, ostream, vector, string и т.д.
1а. Стандартные заголовочные файлы из языка С(не С++) также более не имеют окончания .h, но имеют приставку 'c': cmath, cstdio, cstdlib и т.д. Примечание: помимо этого все ф-ции из этих заголовочных файлов языка С также теперь находятся в пространстве имён std, т.е. теперь нужно писать std::printf, std::strcpy и т.д.
2. Пространство имён std. Все сущности из стандартной библиотеки теперь находятся в нём. Сделано это для того, чтобы они не конфликтовали с вашими сущностями(из-за совпадения имён). Если Вы не хотите постоянно приписывать std::, то есть два варианта как этого избежать:
Код

// первый вариант: подключение только необходимых имён
#include <iostream>

using std::cout;
using std::endl;

int main()
{
    cout << "Hello world!" << endl;
}

// второй вариант: подключение всех имён
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
}


К слову, подключение посредством using или using namespace категорически не рекомендуется делать внутри своих заголовочных файлов.
Также не рекомендуется делать это и внутри модулей(.cpp). Самый правильный вариант - это подключение имён уровня ф-ции, причём, рекомендуется подключать только необходимые имена:
Код

#include <iostream>

int main()
{
    using std::cout;
    using std::endl;
    cout << "Hello world!" << endl;
}


Назад к 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
PM Jabber   Вверх
Igor_K
Дата 9.4.2008, 11:59 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



Кажись у тебя ошибка. Всюду написано:
Код

cout << "Hello world!" << std;

тут походу имеется ввиду
Код

cout << "Hello world!" << endl;
???

Это сообщение отредактировал(а) Igor_K - 9.4.2008, 11:59
PM MAIL   Вверх
archimed7592
Дата 9.4.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Ага, пасип smile.


--------------------
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
PM Jabber   Вверх
JackYF
Дата 9.4.2008, 18:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Всё хорошо, только предлагаю заменить "инжект" на "включение" или "вставка".


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 9.4.2008, 18:28 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Я думал о том, что термин неудачный, но "вставка" мне нравится ещё меньше smile.
Может кто догадается, как правильно это по русски обозвать, чтобы дико не звучало?



--------------------
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
PM Jabber   Вверх
MAKCim
Дата 9.4.2008, 18:32 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата(archimed7592 @  9.4.2008,  18:28 Найти цитируемый пост)
Может кто догадается, как правильно это по русски обозвать, чтобы дико не звучало?

получать доступ к сущностям пространства имен  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 9.4.2008, 18:39 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Длинно и непонятно smile 


--------------------
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
PM Jabber   Вверх
opjox
Дата 9.4.2008, 18:52 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 17.1.2008

Репутация: 2
Всего: 14



Может быть "подключение"?
PM MAIL ICQ   Вверх
jenek28
Дата 9.4.2008, 21:11 (ссылка)    | (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.4.2008

Репутация: -2
Всего: -2



в конце допиши return 0;
и всё будет работать
PM MAIL   Вверх
archimed7592
Дата 9.4.2008, 21:15 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(jenek28 @  9.4.2008,  21:11 Найти цитируемый пост)
в конце допиши return 0;
и всё будет работать 

Спасибо, дорогой, а то у меня до этого не работало smile.

Если уж на то пошло, то писать нужно return EXIT_SUCCESS, но это эквивалентно return 0, а по стандарту, если ф-ция main не возвращает значения, то неявно подставляется возвращение нуля(implicit return 0), так что, если компилятор требует написания return 0 - это свидетельствует о его несовременности smile.


--------------------
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
PM Jabber   Вверх
arkeyn
Дата 26.4.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.4.2008

Репутация: нет
Всего: нет



у меня c++ builder 6 
никак немогу написать консольное приложение под дос, перепробывал выше приведенное, компилирует и материться что нету ДЛЛки
ХЕЛП!!! или скажите плз где норм компилятор скачать, smile или как руки кривые выпрямить smile))))))

Добавлено через 4 минуты и 27 секунд
cc3260.dll вот этот найти не может
PM MAIL   Вверх
archimed7592
Дата 26.4.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 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
PM Jabber   Вверх
arkeyn
Дата 26.4.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.4.2008

Репутация: нет
Всего: нет



Цитата(archimed7592 @ 26.4.2008,  11:17)
arkeyn, см. здесь: http://forum.vingrad.ru/index.php?show_typ...showtopic=49632

ладно, много слишком всего. У меня есть книга там описываеться С++ но только вот мне нужен стабильный компилятор, 
!!рабочий!! вижу что там всего много, какой именно посоветуеш закачать что бы там безпроблем можна было приложения 
под дос писать по книжке и желательно что бы потом чтото под виндовс писать тоже можно было. спб
PM MAIL   Вверх
Akeem
Дата 26.4.2008, 11:53 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: нет
Всего: 3



Странно, что только сейчас об этом заговорили. 
Уже как 4 года говорят о том что все функции ввода/вывода находятся в std и что следует писать программу так
Код


#include <iostream>
using namespace std;

main()
{
cout<<"Hello world!"<<endl;
return 0;
}





--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
arkeyn
Дата 26.4.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.4.2008

Репутация: нет
Всего: нет



Цитата(Akeem @ 26.4.2008,  11:53)
Странно, что только сейчас об этом заговорили. 
Уже как 4 года говорят о том что все функции ввода/вывода находятся в std и что следует писать программу так
Код


#include <iostream>
using namespace std;

main()
{
cout<<"Hello world!"<<endl;
return 0;
}

всеравно неработает, какой вы компилятор юзаете? smile 

посоветуйте компил нормальный что бы с формами можна было и под дос работал ато в моет c++ builder 6 
нехватает библиотек какихто все время, уже достало впрям   smile  smile  smile 
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0916 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.