реклама на сайте
подробности

 
 
6 страниц V  < 1 2 3 4 5 > »   
Closed TopicStart new topic
> Вопросы по C от ламера, В книжках ответа чёта не нахожу
demiurg_spb
сообщение Apr 15 2009, 21:52
Сообщение #31


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Скопидор @ Apr 16 2009, 00:34) *
А когда лучше какую из форм юзать?
Через конструктор с аргументом. Т.к произойдёт создание переменной с одновременной инициализацией,
а в другом случае будет два хода, создание переменной со значением по умолчанию (если оно есть) и только потом присвоение ей значения через оператор =, который реализуется обычно посредством конструктора копирования.
Даже наверное хуже: создание переменной со значением по умолчанию, создание переменной с желаемым значением копирование одного в другое, удаление временной переменной...
Писать на С++ можно начинать предварительно прочитав несколько штук весьма занимательных книжекsmile.gif
Помимо Бьёрна Страуструпа, очень рекомендую эти две книжечки: Скотт Майерс Эффективное использование С++ 50 способов и вторая часть 35 способов:
http://www.bookvoed.ru/searching_for_shop276755.html
Я читал и плакалsmile.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 16 2009, 04:48
Сообщение #32


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Скопидор @ Apr 15 2009, 19:42) *
Вопрос №10.
Для чего нужно ключевое слово «signed» если оно никогда на практике не используется?
Не надо обощать. Если вы его не используете, то это не значит, что другие не используют тоже. Как быть с отрицательными числами?

Цитата(SysRq @ Apr 16 2009, 00:00) *
Тип должен быть известен (прототип, или еще как-либо; declaration). Известным тип так же считается, если вы как раз его и описываете (простейший пример - свзяный список структур: в структуре при ее обявлении есть указатель на неё же).
Ну, это всё-таки указатель, а не сама структура. Размер указателя всегда известен. А размер структуры -- только после того, как она будет полностью описана. Нпример, вы не можете написать:
Код
struct foo;

struct bar
{
     struct foo;
};
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 16 2009, 10:35
Сообщение #33


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Скопидор @ Apr 15 2009, 18:42) *
Вопрос №10.
Для чего нужно ключевое слово «signed» если оно никогда на практике не используется?

Хороший пример:
Код
typedef signed char int8_t;

Но знаковость char по умолчанию можно задать еще и в командной строке! Ясное дело, отдавать себя на откуп памаметрам ком строки никто не согласится.
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 23 2009, 12:22
Сообщение #34





Guests






Возвращаясь к обсуждению директивы #include.

В некоторых книжках (вроде даже сам Страусс) пишут, что «единицей компиляции» является файл и что программа на C++ может состоять из нескольких файлов-исходников и что имеет место быть «раздельная компиляция». Т.е. файлы компилируются по отдельности и получается несколько OBJ-файлов, а затем эти «объектники» линкуются в один экзешник.

А если исходить из идеологии «include», то получается, что сначала препроцессор собирает из нескольких исходников один единственный исходник, и это ОДИН (!!!) файл компилируется.

Поясните мне это противоречие.

А потом, когда мы пишем, к примеру, #include <iostream> ведь не вставляется же сам исходный текст системного библиотечного файла в файл юзверя? Поскольку этого исходного текста нет в дистрибутиве (особенно если компилятор коммерческий), а есть его некий объектный код. Так?

Или я не прав?

Т.е. объясните мне как компилятор узнаёт когда нужно вставить текст в исходник, а когда нужно присоединить объектник файла уже на фазе линковки

Сообщение отредактировал Скопидор - Apr 23 2009, 11:34
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 23 2009, 12:23
Сообщение #35


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Скопидор @ Apr 23 2009, 15:28) *
Поясните мне это противоречие.
Нет противоречия. Компилируется результат препроцессинга. А это один файл.

Цитата
А потом, когда мы пишем, к примеру, #include <iostream> ведь не вставляется же сам исходный текст системного библиотечного файла в файл юзверя? Поскольку этого исходного текста нет в дистрибутиве (особенно если компилятор коммерческий), а есть его некий объектный код. Так?
Вы бы что ли ради интереса в этот файл заглянули.

Цитата(Скопидор @ Apr 23 2009, 16:22) *
Т.е. объясните мне как компилятор узнаёт когда нужно вставить текст в исходник, а когда нужно присоединить объектник файла уже на фазе линковки
Препроцессор, компилятор и линкер -- это разные программы.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 23 2009, 12:27
Сообщение #36


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Ещё раз.

Встретив директиву #include "filename.x", препроцессор ТУПО подставляет на это место содержимое соответствующего файла.
И его в общем-то не интересует, что в том файле. С этим дальше будет разбираться компилятор.

Далее полученный модуль компилируется в объектник.

Так что никаких противоречий.

Если имя файла в угловых скобках <>, это всего лишь означает, что он будет сначала искаться в системных директориях компилятора, а затем уже в файлах проекта.

Код из библиотек не подставляется при компиляции, а линкуется при конечной сборке.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 23 2009, 12:29
Сообщение #37





Guests






Дык всё-таки "раздельная компиляция" есть такое понятие? Или это всё домыслы манагеров и что реально компилиться всегда один CPP-исходник?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 23 2009, 12:35
Сообщение #38


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Скопидор @ Apr 23 2009, 16:29) *
Дык всё-таки "раздельная компиляция" есть такое понятие?
Да, есть.
Цитата
реально компилится всегда один CPP-исходник?
Да.
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 23 2009, 12:35
Сообщение #39





Guests






Цитата(MrYuran @ Apr 23 2009, 16:27) *
Код из библиотек не подставляется при компиляции, а линкуется при конечной сборке.

А мне сказали, что препроцессор - это отдельная прога. Откуда она знает какой файл из библиотеки, а какой нет? unsure.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 23 2009, 12:37
Сообщение #40


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Скопидор @ Apr 23 2009, 16:29) *
Дык всё-таки "раздельная компиляция" есть такое понятие? Или это всё домыслы манагеров и что реально компилиться всегда один CPP-исходник?

Ну если он один, то да.
Если два - то сначала один, потом другой.
Если три - то сначала один, потом второй, потом третий.
И т.д.

И всё это в соответствии с makefile -ом или опциями командной строки


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 23 2009, 12:51
Сообщение #41





Guests






Т.е. препроцессор каким-то чудесным образом узнаёт в каких случаях при встрече им директивы #include вставлять вместо #include содержимое файла, а когда нет?

А если он не вставляет содержимое системного файла в наш исходник, то почему компилятор не ругается "undefined variable" если мы юзаем переменные из системного файла?



Цитата(MrYuran @ Apr 23 2009, 16:27) *
Код из библиотек не подставляется при компиляции

А тогда зачем вообще писать, к примеру, #include <iostream> если препроцессор всё равно не подставляет код из этого библиотечного файла в наш исходник?

Сообщение отредактировал Скопидор - Apr 23 2009, 13:07
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Apr 23 2009, 12:54
Сообщение #42


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Цитата(Скопидор @ Apr 23 2009, 18:35) *
А мне сказали, что препроцессор - это отдельная прога. Откуда она знает какой файл из библиотеки, а какой нет? unsure.gif

Где какой файл он узнаёт из путей, которые ему указывают. Если это кавычки (двойные или одинарные,не помню),то ищется в текущей директории проекта. Если угловые скобки, то в директориях, где сидят библиотеки, компиляторы, линкеры, т.е. иначе - системные директории. Пути прописываются в настройках компилятора, линкера, или препроцессора, или в среде разработки, смотря в чём вы работаете.
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 23 2009, 13:03
Сообщение #43





Guests






Цитата(AndreyKeil @ Apr 23 2009, 16:54) *
Где какой файл он узнаёт из путей, которые ему указывают. Если это кавычки (двойные или одинарные,не помню),то ищется в текущей директории проекта. Если угловые скобки, то в директориях, где сидят библиотеки, компиляторы, линкеры, т.е. иначе - системные директории. Пути прописываются в настройках компилятора, линкера, или препроцессора, или в среде разработки, смотря в чём вы работаете.

Т.е. работа препроцессора (вставлять содержимое файла в наш файл или не вставлять) зависит от того, в какой директории находится файл указанный в #include?
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 23 2009, 13:21
Сообщение #44


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Скопидор @ Apr 23 2009, 17:03) *
Т.е. работа препроцессора (вставлять содержимое файла в наш файл или не вставлять) зависит от того, в какой директории находится файл указанный в #include?


Вставлять всегда, а искать этот файл сначала в зависимости от скобок. <> ищется сначала в системных файлах, затем в тех каталогах, которые указаны в настойках, включая каталог проекта.

А чего рассуждать. Берете свой проект, в какой-то исходный файл пишите #include на несуществующий. Далее компиляция и разбор полетов. Очень наглядно rolleyes.gif

Использование препроцессора позволяет часто найти свои ошибки в #define.

P.S. Может документацию по используемому Вами компилятору почитать, да и в книгах по С, CPP обычно использование препроцессора, компилятора, линкера и библиотекаря разбирается.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Apr 23 2009, 14:57
Сообщение #45





Guests






Вопрос №12
Как и для чего в C++ используется идентификатор типа в enum кроме объявления/определения переменных?

Код
// main.cpp
// 18:17 23 апреля 2009 г.
#include <iostream>
using namespace std;
void main ()
{
    enum My_Type {null, one, two, three};
    My_Type A;
    A = My_Type (10);              // Почему здесь компилятор не ругается? Ведь 10 не входит в множество значений типа My_Type
    cout << "A = " << A << '\n';   // Пишет A = 10, хотя 10 больше самой большой из констант описанных в enum типа My_Type
}



///////////////////////////////////////////////////
///////////////////////////////////////////////////

Цитата(mdmitry @ Apr 23 2009, 17:21) *
Вставлять всегда


??? cranky.gif

А как же такие понятия как "раздельная компиляция" и "предкомпилированные файлы библиотек"?

А как же высказывания участника:
Цитата(MrYuran @ Apr 23 2009, 16:27) *
Код из библиотек не подставляется при компиляции, а линкуется при конечной сборке.





///////////////////////////////////////////////////
///////////////////////////////////////////////////


Вопрос №13 (Про функцию main)

В книгах по C++ вначале пишут что выполнение программы начинается с функции main. Но в главах, посвящённых классам, пишут что выполнение программы начинается с выполнения конструкторов объектов глобальных классов. Так с чего же всё-таки начинается выполнения программы?


//////////////////////////////////////////////////////////

Вопрос №14

В книгах по C++ пишут, что в строковых литералах допустимы почти любые символы. А какие символы не допустимо использовать внутри строкового литерала?


Замечание модератора. Скопидор, Вы начинаете злоупотреблять возможностями по форматированию текста сообщения, нарушая п.2.1г Правил форума.
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 5 > » 
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 23:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.09748 секунд с 7
ELECTRONIX ©2004-2016