Форум программистов, компьютерный форум CyberForum.ru

include и некоторые мелочи - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.90
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
07.01.2011, 15:36     include и некоторые мелочи #1
Вот код моей первой программы на C++:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main () {
    cout << "Hello world!\n";
    _getch();
    return 0;
}
Увы и ах, но она не сработала. Вот ошибка:
c:\documents and settings\admin\мои документы\visual studio projects\hello world\hello world.cpp(14): fatal error C1010: unexpected end of file while looking for precompiled header directive

И ещё такие вопросы возникли:
1. В папке resource files находятся файлы, которые используются как ресурсы - звуки, картинки и т. д. и т. п., в папке source - исходный код, а в папке header files что находится? Как я понял, так только .h файлы, но что они в себе несут? Функции? Или может только их можно подключить с помощью директивы include?

2. Чем отличается формат .cc от .cpp?

3. В каком порядке выполняются исходные файлы и файлы ресурсов, если их несколько? Я вообще так всё представляю - вначале загружаются ресурсы, потом header files, а после уже начинает выполняться код. Я правильно мыслю?

4. <iostream> и <conio.h>. Это стандартные файлы ведь? То есть их создавать не нужно, они уже в самом ядре C++ есть? То, что <iostream> есть, это понятно - он без расширения, то есть "особый" файл, а насчёт conio.h сомневаюсь - он ведь с расширением Как-то это странно - стандартный файл с расширением...

5. Зачем в проекте создавать под-проекты?

Вроде всё Извините, если много вопросов, просто новичок
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
robober
21 / 21 / 2
Регистрация: 18.01.2010
Сообщений: 41
08.01.2011, 11:55     include и некоторые мелочи #41
А вообще для мелких проектов подойдет Notepad++ и Mingw

Инструкция в New

Компиляция:
g++ -c ИМЯ_ФАЙЛА.cpp

g++ -o ИМЯ_ФАЙЛА ИМЯ_ФАЙЛА.o

ИМЯ_ФАЙЛА.exe

http://www.cyberforum.ru/attachment....1&d=1294476829
http://www.cyberforum.ru/attachment....1&d=1294476829
http://www.cyberforum.ru/attachment....1&d=1294476829
Вложения
Тип файла: rar Notepad2B2B-5.3-Final.rar (6.08 Мб, 15 просмотров)
Тип файла: rar mingw.rar (526.5 Кб, 10 просмотров)
Тип файла: rar New.rar (63.9 Кб, 10 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
robober
21 / 21 / 2
Регистрация: 18.01.2010
Сообщений: 41
08.01.2011, 12:00     include и некоторые мелочи #42
Цитата Сообщение от Hagrael Посмотреть сообщение
А чем же таким отличается empty проект? Можно ведь по идее просто создать проект win32, не ставить галочку на empty и поудалять все файлы (как я и делал), или что? В папке Generals пустого нет. Там есть "Custom Wizard", "Extended Stored Procedure Dll", "Makefile project".
Они отличаются настройками!
Посмотрите в настройках проекта.
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 13:44  [ТС]     include и некоторые мелочи #43
robober, понятно, но всё же мне кажется, в Visual Studio лучше работать, хотя бы потому, что когда придётся делать солидные проекты, заново привыкать не нужно будет И ещё вопрос - зачем создавать в одном решении несколько? Что вообще представляет из себя решение? Сборник проектов? Если так, то каким образом оно компилируется? И так же интересно, как компилируется сам проект, ведь он может содержать несколько файлов .cpp, тогда что несколько .exe создадутся?

Добавлено через 12 минут
Egv, отличная статья! А можете ещё ссылки на подобные дать?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
08.01.2011, 13:52     include и некоторые мелочи #44
Цитата Сообщение от Hagrael Посмотреть сообщение
Evg, там про кавычки и угловые скобки не написано
Раздел 10.1

Цитата Сообщение от Hagrael Посмотреть сообщение
Насколько я понял, в кавычках пишешь путь к файлу, созданному программистом, а к файлам из стандартной библиотеки путь пишется в угловых скобках, так?
Грубо говоря, дя

Цитата Сообщение от Hagrael Посмотреть сообщение
Но такой вопрос - почему <conio.h> пишется с .h, а <iostream> просто так?
Вот так посчитали разработчики Си++. Все файлы, которые входят в стандартную библиотеку Си++, имеют имена без .h. Есть ещё старый вариант (по более старым стандартам), где файлы пишутся с .h (например, <iostream.h>). Старый вариант отличается от нового тем, что в старом принудительно добавлено "using namespace std;".

Цитата Сообщение от Hagrael Посмотреть сообщение
И ещё такой вопрос - такой код правильный?
C++
1
2
3
#define MACROS1 1
#define MACROS2 MACROS1
int a=MACROS2
То есть заменяются ли в директивах макросы?
Вопрос не совсем понял, но после препроцессирования у тебя раскроется в "int a=1"

Добавлено через 4 минуты
Цитата Сообщение от Hagrael Посмотреть сообщение
А можете ещё ссылки на подобные дать?
Тут много чего: http://www.cyberforum.ru/faq/
В каждом разделе в самом начале списка тем есть прилепленные темы: перед ними написано слово "Важно".

По поводу gcc/mingw - http://www.cyberforum.ru/faq/thread61845.html
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 14:03  [ТС]     include и некоторые мелочи #45
Evg, по C++ очень мало статей Да и вообще статей не так уж много.
Цитата Сообщение от Evg Посмотреть сообщение
Грубо говоря, дя
А почему грубо? Есть какие-то особые правила?
Цитата Сообщение от Evg Посмотреть сообщение
Вопрос не совсем понял, но после препроцессирования у тебя раскроется в "int a=1"
Вот у меня есть такой код:
C++
1
2
3
#define MACROS1 LALALA
#define MACROS2 MACROS1
int a=MACROS2
Да, в итоге a будет содержать LALALA, это понятно, а каким образом это работает - когда препроцессор видит MACROS1 во 2-й директиве, то он его заменяет или просто все макросы содержатся в памяти и если он видит присвоение новому макросу какого-либо значения, то он смотрит, есть ли макрос с названием, равным значению создаваемого макроса, в памяти, и если есть, то препроцессор подставляет значение этого макроса создаваемому?

И вот ещё вопрос - вот код (такой же):
C++
1
2
3
#define MACROS1 LALALA
#define MACROS2 MACROS1
int a=MACROS2
Но мне не надо, чтобы MACROS2 имел то же значение, что и MACROS1, а имел именно значение "MACROS1". Как такое реализовать? И как показать, что коментарии не действительны? Вот к примеру я захочу вместо "MACROS1" запихать туда значение "OLOLO /* OLOLO */", а "/* OLOLO */" препроцессор посчитает за коментарий. Как тут быть?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.01.2011, 14:10     include и некоторые мелочи #46
Hagrael, возможно, объявить MACROS2 до MACROS1? На счёт комментариев - ну так препроцессор тупо заменяет физически в коде все вхождения MACROS1 на "OLOLO /* OLOLO */", как если бы вы сами это написали. Так что никак тут не быть, в коде комментарии останутся, а если вы хотите, чтобы это интерпретировалось как строка - тогда и надо макрос создавать как строку, например так

C
1
2
3
#define STR "OLOLO \/* OLOLO *\/"
...
printf(STR);
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 14:14  [ТС]     include и некоторые мелочи #47
silent_1991, понятно, спасибо. А что с присвоением MACROS2 значения "MACROS1" (не то, что содержит MACROS1, а строку "MACROS1", только без кавычек).
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.01.2011, 14:15     include и некоторые мелочи #48
Hagrael,
Цитата Сообщение от silent_1991 Посмотреть сообщение
возможно, объявить MACROS2 до MACROS1?
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 14:21  [ТС]     include и некоторые мелочи #49
silent_1991, допустим, что нет (хотелось бы знать все точности).
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
08.01.2011, 14:23     include и некоторые мелочи #50
Цитата Сообщение от Hagrael Посмотреть сообщение
А почему грубо? Есть какие-то особые правила?
В разделе 10.1 всё же написано: каждый компилятор поступает по своему. Если и есть какие-то строгие стандарты, то я о них не знаю. Вот ты задаёшь много вопросов, значит любознательный. Твои вопросы говорят о том, что ты скорее практик, чем теоретик. Поставь себе несколько разных компиляторов и поэкспериментируй. Опыт экспериментов с разными компиляторами в любом случае пригодится

Цитата Сообщение от Hagrael Посмотреть сообщение
Evg, по C++ очень мало статей Да и вообще статей не так уж много
Если хочешь много - читай книжки и пользуйся гуглом. Эти статьи писались не за деньги, а потому за количеством никто не гнался

Цитата Сообщение от Hagrael Посмотреть сообщение
Да, в итоге a будет содержать LALALA
Такая постановка утверждения не правильная. Препроцессирование - это обычная текстовая подстановка (т.е. препроцессор не знает ни про какие переменные и ни про какаие языки программирования). Правильная постановка будет такая, что после препроцессирования текст программы превратится в "a=LALALA"

Цитата Сообщение от Hagrael Посмотреть сообщение
Но мне не надо, чтобы MACROS2 имел то же значение, что и MACROS1, а имел именно значение "MACROS1". Как такое реализовать?
Оно тебе и в правду надо или это просто вопрос? Потому как с ходу ответить не могу, могу только экспериментально потыкать (т.е. имеются предположения, но надо их проверить). А сейчас компиляторов под рукой нет

Цитата Сообщение от Hagrael Посмотреть сообщение
Вот к примеру я захочу вместо "MACROS1" запихать туда значение "OLOLO /* OLOLO */", а "/* OLOLO */" препроцессор посчитает за коментарий. Как тут быть?
Как я уже писал в статье, препроцессор пропускает комментарии. Теоретически, если на предыдущий вопрос имеется положительный ответ, то по этому вопросу метод будет аналогичным. Но ты можешь и сам поэкспериметировать - надо смотреть в сторону разделе 3.3.5 из статьи про препроцессорные директивы. И мне кажется, что когда ты сам опытным путём до чего-то сможешь докопаться, это будет куда полезнее, чем если кто-то ответит тебе на этот вопрос
silent_1991
08.01.2011, 14:29
  #51

Не по теме:

Evg,

Цитата Сообщение от Evg Посмотреть сообщение
когда ты сам опытным путём до чего-то сможешь докопаться, это будет куда полезнее, чем если кто-то ответит тебе на этот вопрос
Тем более, что труды Microsoft'овских разрабов наконец-то у ТСа начали работать правильно и компилировать код)))

Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 14:57  [ТС]     include и некоторые мелочи #52
Цитата Сообщение от Evg Посмотреть сообщение
И мне кажется, что когда ты сам опытным путём до чего-то сможешь докопаться, это будет куда полезнее, чем если кто-то ответит тебе на этот вопрос
Этого я не отрицаю Дальше постараюсь копать самостоятельно, в крайнем случае спрошу здесь, всем спасибо, кто мне помогал А статей много я нашёл здесь. А по поводу коментариев это я сглупил.

Добавлено через 20 минут
А вот на это практически нигде кроме форума я ответа не найду. setlocale отказывается работать. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <locale.h>
#define BOILING_POINT_F 212
#define FREEZE_POINT_F 32
 
using namespace std;
 
int main() {
    setlocale(LC_CTYPE,"Russian");
    float f, c;
    cout << "0C = " << FREEZE_POINT_F << "F\n" << "100C = " << BOILING_POINT_F << "F\n\n" << "Введите температуру по Фаренгейту: ";
    cin >> f;
}
Пишет каракули, в чём дело?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.01.2011, 15:09     include и некоторые мелочи #53
Установи для окна шрифт Lucida Console
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 15:12  [ТС]     include и некоторые мелочи #54
kazak, каким образом?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.01.2011, 15:14     include и некоторые мелочи #55
Правый клик по заголовку окна, пункт "Свойства", вкладка "Шрифт".
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 15:20  [ТС]     include и некоторые мелочи #56
kazak, всё аналогично - каракули.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.01.2011, 15:22     include и некоторые мелочи #57
Попробуй такой вариант Русские шрифты в консоли
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 15:30  [ТС]     include и некоторые мелочи #58
Везде ошибку выдаёт
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
08.01.2011, 15:30     include и некоторые мелочи #59
Цитата Сообщение от Hagrael Посмотреть сообщение
Этого я не отрицаю Дальше постараюсь копать самостоятельно, в крайнем случае спрошу здесь, всем спасибо, кто мне помогал А статей много я нашёл здесь. А по поводу коментариев это я сглупил.

Добавлено через 20 минут
А вот на это практически нигде кроме форума я ответа не найду. setlocale отказывается работать. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <locale.h>
#define BOILING_POINT_F 212
#define FREEZE_POINT_F 32
 
using namespace std;
 
int main() {
    setlocale(LC_CTYPE,"Russian");
    float f, c;
    cout << "0C = " << FREEZE_POINT_F << "F\n" << "100C = " << BOILING_POINT_F << "F\n\n" << "Введите температуру по Фаренгейту: ";
    cin >> f;
}
Пишет каракули, в чём дело?
Ну во первых у тебя #include <windows.h> нету
А вообще делай так как выше написали)
C++
1
2
3
#include <windows.h>
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2011, 15:38     include и некоторые мелочи
Еще ссылки по теме:

Подскажите, в тесте некоторые мелочи C++
Чем отличается #include <cstring>, #include <string> и #include <string.h>? C++
C++ Программа подсчета мелочи

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
08.01.2011, 15:38  [ТС]     include и некоторые мелочи #60
Никак. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <windows.h>
#define BOILING_POINT_F 212
#define FREEZE_POINT_F 32
 
using namespace std;
 
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    setlocale(LC_CTYPE, "Russian");
    float f, c;
    cout << "0C = " << FREEZE_POINT_F << "F\n" << "100C = " << BOILING_POINT_F << "F\n\n" << "ВВПРЕ";
    cin >> f;
}
Yandex
Объявления
08.01.2011, 15:38     include и некоторые мелочи
Ответ Создать тему
Опции темы

Текущее время: 14:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru