Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Первая программа на С++ в среде Visual Studio


Автор: archimed7592 11.4.2008, 11:20
Если у Вас не влезают картинки, то окройте версию для печати: опции темы -> версия для печати (или просто нажмите http://forum.vingrad.ru/index.php?act=Print&client=printer&f=471&t=205782).

Далее будет пошагово и с иллюстрациями описан процесс написания самой простой программы на С++ в среде Visual Studio.
Примечание: инструкция создавалась с использованием Visual Studio 2008, но с тем же успехом может быть применена на версиях 2003(.NET) и 2005.

Далее Visual Studio будет также упоминаться под аббревиатурой VS.

Запускаем Visual Studio.
Если это первый запуск, то VS может задать пару вопросов. Если Вы не знаете что ответить на эти вопросы, то просто жмите OK.
В итоге у Вас должно появится такое окно.
user posted image
Примечание: скорее всего оно не будет пустым - будет открыта страница Start. Её можно смело закрывать.


Cоздаём проект.
user posted image
File -> New -> Project
user posted image
Visual C++ -> Win32 -> Win32 Console Application -> Введите имя проекта -> OK
user posted image
Нажмите Finish.

Выключаем в настройках проекта Юникод.
user posted image
Project -> Properties
user posted image
В выпадающем списке Configuration выбираем All Configurations. Слева щёлкаем на General. Справа в поле Character Set выбираем пункт Not Set. Жмём ОК.

Прописываем необходимые заголовочные файлы в stdafx.h.
Примечание: Вы можете прописать их в файле .cpp вместе с функцией main, но лучше писать их в stdafx.h для ускорения повторной компиляции.
user posted image
Открываем stdafx.h. Там
Код
// Комментируем эти строки
/*
#include <stdio.h>
#include <tchar.h>
*/

// Дописываем эти строки
#include <ostream>
#include <iostream>



Пишем код программы.
user posted image
Открываем my first program.cpp (или как Вы назвали проект). Там
Код
int main(int argc, char *argv[]) // оригинальную строку модифицируем чтобы выглядела так
{
    // дописываем сюда вот это
    std::cout << "Hello world!" << std::endl;
    return 0;
}

Примечание: не удаляйте строку #include "stdafx.h" - она должна быть первой строкой в любом вашем .cpp файле, иначе будете получать ошибки во время сборки проекта.


Собираем проект.
user posted image
В главном меню(сверху) Build -> Build Solution
user posted image
1. Внизу видим что сборка началась (Build started). Она закончится спустя 2-10 секунд в зависимости от производительности компьютера.
2. Убеждаемся что наш проект собрался без ошибок и предупреждений: "my first program - 0 error(s), 0 warning(s)".
3. Убеждаемся что сборка закончилась успешно: "Build: 1 succeeded".
4. В случае наличия ошибок их можно посмотреть во вкладке Error List.

Запускаем проект.
user posted image
В главном меню(сверху) Debug -> Start Without Debugging
user posted image
Вы должны увидеть чёрное окно(называемое консолью) c текстом внутри "Hello world!".
Примечание: можно запустить Start Debugging, но тогда программа выполниться и сразу закроется. Это произойдёт настолько быстро, что Вы даже не заметите что она вывела.

Поздравляю, Вы написали, скомпилировали и запустили свою первую программу.

Добавлено @ 11:25
Надо что-то придумать, чтобы скороллбар находился под каждым скрином, а не внизу поста...

http://forum.vingrad.ru/index.php?show_type=forum&showtopic=269794&kw=faq-c++

Автор: vik5252 6.5.2008, 08:03
Цитата(archimed7592 @  11.4.2008,  11:20 Найти цитируемый пост)
Открываем stdafx.h. Там

Код

// Комментируем эти строки
/*
#include <stdio.h>
#include <tchar.h>
*/

// Дописываем эти строки
#include <ostream>
#include <iostream>


Я здесь непонял, куда пропали строки 
Код

#pragma once
#include "targetver.h"

И нужны ли они в данном коде?
Также не совсем ясно, что означает указание "Открываем stdafx.h" ?
Ведь фактически файл stdafx.h и так уже открыт, мы только закоментировали пару строк и пару дописали, и  нажали на кнопку "сохранить" (как показано на картинке выше).

Автор: anatox91 6.5.2008, 19:06
Цитата(vik5252 @  6.5.2008,  08:03 Найти цитируемый пост)
Я здесь непонял, куда пропали строки 

никуда они не пропали,  просто в том листинге было написано только то, что надо изменить, а строки
Код

#pragma once
#include "targetver.h"

должны остаться

Автор: Romashkaz 5.9.2008, 19:52
Блин, у меня он нашёл какие-то 2 ошибки и не хочет компилировать программку :(

Автор: SHraybikus 5.9.2008, 20:19
Цитата(Romashkaz @ 5.9.2008,  19:52)
Блин, у меня он нашёл какие-то 2 ошибки и не хочет компилировать программку :(

попробуй ввести код иначе- проще:

#include <iostream>
  using namespace std;
  void main()
{
    cout<<" Hello Dos! "<<endl; //с переходом на новую строку
}

Автор: Rpahut 5.9.2008, 23:26
Цитата

Блин, у меня он нашёл какие-то 2 ошибки и не хочет компилировать программку :(


Ошибки надо исправлять. Иначе без туториала с картинками ничего не сможешь написать.
Почитай чо его не устраивает и допиши.

Автор: Acer 6.9.2008, 07:32
Цитата(archimed7592 @ 11.4.2008,  11:20)
Примечание: не удаляйте строку #include "stdafx.h" - она должна быть первой строкой в любом вашем .cpp файле, иначе будете получать ошибки во время сборки проекта.

Одна из причин по которой я не люблю VS smile

Автор: vinter 6.9.2008, 10:50
Цитата(Acer @  6.9.2008,  08:32 Найти цитируемый пост)
Одна из причин по которой я не люблю VS

ты просто не умеешь его готовить ©

Автор: Acer 6.9.2008, 12:30
Цитата(vinter @ 6.9.2008,  10:50)
Цитата(Acer @  6.9.2008,  08:32 Найти цитируемый пост)
Одна из причин по которой я не люблю VS

ты просто не умеешь его готовить ©

желания готовить в такой кухне у меня нет

Автор: cutwater 6.9.2008, 12:56
Я в свое время на VS писал длительное время.... если руки ровные и с родным языком проблем нет, то все настраивается
потом открыл для себя рай линукса и gcc

Автор: Acer 6.9.2008, 14:04
хм. Если я правильно понял, то те, кто пишут не в VS и компилируют не VS компилятором имеют кривые руки?

Автор: vinter 6.9.2008, 16:43
Цитата(Acer @  6.9.2008,  15:04 Найти цитируемый пост)
хм. Если я правильно понял, то те, кто пишут не в VS и компилируют не VS компилятором имеют кривые руки?

нед, люди которые в ответ на 
Цитата(Acer @  6.9.2008,  08:32 Найти цитируемый пост)
Примечание: не удаляйте строку #include "stdafx.h"

пишут 
Цитата(Acer @  6.9.2008,  08:32 Найти цитируемый пост)
Одна из причин по которой я не люблю VS

имеют не совсем ровные руки ;)

Автор: Acer 6.9.2008, 16:49
vinter, ну хз. Да, я с этим не разбирался. Возможно настроить студию так, чтобы их не использовать?

Автор: vinter 6.9.2008, 16:53
да, в настройках проекта precompiled headers - off

Автор: Acer 6.9.2008, 17:38
vinter, а почему, когда при создании проекта выбираешь "Не юзать прекомпилед хеадерс", они все равно есть?
еще минус в студии(2008), после установки она занимает около 3 Gb места на диске smile + Ставит непонятно зачем MSSQL Server. Хотя я не выбирал его при установке студии.
И еще один вопрос меня мучает:
к примеру, код:
Код

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){
    _tprintf( _T( "строка" ) );
      ........
}

Зачем _tmain, _tprintf .... ? Что это за _t ? Микросовт зохотела выделиться? smile

Автор: vinter 6.9.2008, 18:14
Цитата(Acer @  6.9.2008,  18:38 Найти цитируемый пост)
vinter, а почему, когда при создании проекта выбираешь "Не юзать прекомпилед хеадерс", они все равно есть?

нет их, если ставишь.
Цитата(Acer @  6.9.2008,  18:38 Найти цитируемый пост)
еще минус в студии(2008), после установки она занимает около 3 Gb места на диске 

2Гб, при нынешних хардах это мелочь.
Цитата(Acer @  6.9.2008,  18:38 Найти цитируемый пост)
 Ставит непонятно зачем MSSQL Server

не хочешь не ставь

Цитата(Acer @  6.9.2008,  18:38 Найти цитируемый пост)
Зачем _tmain, _tprintf .... ? Что это за _t ? Микросовт зохотела выделиться? 

не хочешь не используй, это расширение MS.

Автор: Acer 6.9.2008, 18:18
странно... я ему одно, а он мне другое. ну ладно.

Автор: W4FhLF 7.9.2008, 07:09
Acer, тебе говорят о том, что студия достаточно хорошо поддерживает стандарты. Всё, что не входит в стандарт является расширениями самого компилятора и линкера, которые существуют для удобства или по каким-то другим причинам. Тебе никто не навязывает использование этих дополнений, надо только понимать, что ты делаешь. 

Автор: Keler 14.9.2008, 11:27
Все замечательно, но когда уже запускаешь программу в папке Debug то она быстро выводиться и сразу же закрываться.Как исправить?

Автор: Acer 14.9.2008, 11:47
нах

Автор: W4FhLF 14.9.2008, 11:51
Acer
Код

#include <stdio.h>
#include <iostream>

int main(int argc, char **argv){
    printf( "Hello World!\n" );
    std::cin.get();
    return 0;
}


Отлично. Вывод с помощью С-функции printf, а сразу после С++ streams. За такой стиль надо наказывать smile

Автор: Acer 14.9.2008, 11:57
нах

Автор: W4FhLF 14.9.2008, 12:05
Acer, тема про С++. Зачем тут С-style? 


Keler

Код

#include <iostream>

int main()
{
    std::cout << "Hello world!" << std::endl;
    std::cin.get();
    return 0;
}

Автор: Keler 14.9.2008, 12:17
W4FhLF 
Большое спасибо

Автор: Keler 19.9.2008, 02:21
и еще один вопрос.Такая программа не запускаться на другом компьютере.Пишет "Приложение не было запущено, поскольку оно некорректно настроено.Повторная установка приложения может решить данную проблему.
За рание спасибо.

Автор: IKM2007 19.9.2008, 04:59
Цитата(Keler @  19.9.2008,  02:21 Найти цитируемый пост)
и еще один вопрос.Такая программа не запускаться на другом компьютере.Пишет "Приложение не было запущено, поскольку оно некорректно настроено.Повторная установка приложения может решить данную проблему.За рание спасибо.

Какая программа?Можно по-конкретнее?
Экзешник, что-ли? smile 

Автор: Keler 19.9.2008, 13:45
извиняюсь, я имел виду вот эту программу Hello World.

Автор: W4FhLF 19.9.2008, 13:52
Нужно установить Redistributable Package версии соответствующий версии компилятора(студии)

http://www.microsoft.com/downloads/details.aspx?FamilyID=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en

Автор: HappyLife 19.9.2008, 14:09
Acer, Я с тобой полностью согласен. 

На самом деле, VS есть за что не любить. Я читал книжку по С++ и сразу получись написать программу на Builder. Но вот пока не прочтешь документацию отдельно по VS фиг что получиться, для новичка.


Автор: W4FhLF 19.9.2008, 14:12
Цитата(HappyLife @  19.9.2008,  14:09 Найти цитируемый пост)
Я читал книжку по С++ и сразу получись написать программу на Builder. Но вот пока не прочтешь документацию отдельно по VS фиг что получиться, для новичка.


Если человек ниразу не видивший машину не сможет на ней поехать в первые 5 минут, значит машина фиговая?smile 

Это не критерий. 

Автор: HappyLife 19.9.2008, 16:37
smile 
W4FhLF, Никто не спорит. Но любить (не любить) есть нечто личное. И значить в этом плане критерии у всех свои. А значит критерий, для меня и для Acer=) 

Автор: Med 20.9.2008, 01:43
Цитата(W4FhLF @ 19.9.2008,  13:52)
Нужно установить Redistributable Package версии соответствующий версии компилятора(студии)

а как узнать версию компилятора студии?

Автор: baltushka 8.6.2009, 22:00
Не поленилась зарегестрироваться и сказать СПАСИБО!!!!!! людям, которые пишут ясно, четко, понятно и "по пунктикам". Не с первого раза, с исправлениями, что в комментариях, но наконец-то получилось запустить программу!! пусть такую простую и маленькую, но какой толк от кипы учебников и примеров, если я 3 дня уже не понимаю ошибок компилятора и никак не могу начать работу???

 Спасибо! Спасибо! Спасибо! Спасибо! СпасибО! за то, что расшифровываете "умные" вещи для желающих стать такими новичков!!

Автор: jonie 9.6.2009, 15:50
Цитата

а как узнать версию компилятора студии? 

C:\Program Files\Microsoft Visual Studio 8\VC>cl
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86

из консоли "Visual Studio 20xx Command Prompt" (в пуске ищите).

только вам нужна не версия компилятора, а версия CRT- это библиотека runTime-овая. Для VS2005 это 8-ая версия, для 2008 - 9-ая, 2003-7ая, VC6 - шестая.


Автор: V0LT 5.7.2009, 04:32
Сегодня сел за VS++ 2008 ... выходят первые билды доволен аки слон smile 
Делал в основном приложения в Delphi на "чистом" WinAPI - пригодилось  smile 

З.Ы. Как и в Коде Гир 2009 разработчики на юникод пошли ... не знаю как VS ... юникодных строк пока не касался ... но в Коде Гир 2009 они явно перемудрили ...

З.Ы.Ы После форумов типа forum.delphiexpert.ru хочется Delphi забыть как страшный сон ... плееры ... ламеры ... копипаст ... ужас какой smile 

Автор: SergMilk 30.7.2009, 23:15
А вот вопрос, в Восьмой студии можно писать код, который будет потом и в шестой компилироваться?
Или все эти namespace несовместимы?

Автор: andrew_121 31.7.2009, 00:26
SergMilk, Дело не в Студии или в компиляторе, дело в стандарте С/С++
С каким именно компилятором совместимость интересует?

Автор: maxim1000 31.7.2009, 08:39
касательно precompiled headers:
всё-таки это средство оптимизации, и выбор его по умолчанию для всего проекта - оптимизация преждевременная
а пока размер проектов дойдёт до таких, когда она даёт заметный выигрыш, новичёк перестанет быть новичком smile

кроме того вот это:
Цитата(archimed7592 @  11.4.2008,  11:20 Найти цитируемый пост)
Вы можете прописать их в файле .cpp вместе с функцией main, но лучше писать их в stdafx.h для ускорения повторной компиляции.

- просто ужасно
такой подход формирует стиль, при котором компилируемость каждого cpp-шника зависит от содержимого соответствующего stdafx.h

ИМХО, лучше бы просто отключить precompiled headers при создании проекта, чтобы не грузить новичков информацией, на данный момент не нужной...

Автор: Леопольд 31.7.2009, 09:34
Цитата(maxim1000 @ 31.7.2009,  08:39)
ИМХО, лучше бы просто отключить precompiled headers при создании проекта, чтобы не грузить новичков информацией, на данный момент не нужной...

Абсолютно согласен. Если сразу начать пихать все хидеры в предкомпилированный, то будет трудно понять как надо организовывать проект без оного.

Добавлено через 5 минут и 15 секунд
А вообще, микросовтовская студия - очень хорошая IDE, удобная. Но, для изучения С++ gcc подходит лучше, более строго придерживается стандарта.

Автор: NFK 22.3.2012, 11:00
Всем привет!
Первый раз сел изучать C++. В универе сказали, что программы писать надо в "VS 2008". Тут нашел простую и понятно написанную инструкцию по настройке среды при первом запуске. Хочу сразу сказать огромное автору "СПАСИБО!". Все получилось с первого раза и без ошибок.  smile 
Но, как у новичка, сразу появились вопросы:

1. Почему-то у меня не отображаются скрины в посте автора, поэтому действовал по тексту.  smile  (также не отображаются иконки папок личного ящика в "Профиле"). Аватарки, смайлы, звездочки и прочие вещи видно. Возможно это из-за переезда форума.
2.

Цитата(archimed7592 @  11.4.2008,  15:20 Найти цитируемый пост)
Выключаем в настройках проекта Юникод.

Project -> Properties

В выпадающем списке Configuration выбираем All Configurations. Слева щёлкаем на General. Справа в поле Character Set выбираем пункт Not Set. Жмём ОК.


Сорри, что туплю, но для чего именно делается данное действие?

Автор: borisbn 22.3.2012, 14:18
Цитата(NFK @  22.3.2012,  11:00 Найти цитируемый пост)
для чего именно делается данное действие?

Все WinAPI-функции, работающие со строками (почти все) описаны следующим образом:
Код

void SomeStringFuncW( const whar_t * str ) {
    ...
};
void SomeStringFuncA( const char * str ) {
    ... // в большинстве функций здесь строка преобразовывается в unicode-строку и передаётся в функцию ч суффиксом W
};
#ifdef UNICODE
    #define SomeStringFunc SomeStringFuncW
#else
    #define SomeStringFunc SomeStringFuncA
#endif

Т.к. огромное количество примеров в интернете работает с char*, с std::string и т.п., а также, если учесть, что новичкам не нужно думать о i18n, то указанное действие - вполне логичный совет. Не отключая unicode, такие конструкции не будут работать:
Код

std::string str;
cin >> str;
SomeWinAPIFunc( str.c_str() );

придётся писать одним из двух способов
Код

// 1
std::wstring str;
wcin >> str;
SomeWinAPIFunc( str.c_str() );
// 2
std::string str;
cin >> str;
SomeWinAPIFuncA( str.c_str() );

В общем - правильный совет для новичков.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)