Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопросы по C от ламера
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2
SysRq
Скопидор, уймитесь с форматированием. Весеннее обостение что ли?!

В начале темы было интересно даже. А сейчас отвечать не вижу сымсла, т.к. поиском ответов на вопросы вы лично не озадачиваетесь вовсе.
Скопидор
Цитата(SysRq @ Apr 23 2009, 21:42) *
Скопидор, уймитесь с форматированием. Весеннее обостение что ли?!

Да блин, достало. Вместо того, чтобы конкретно разъяснить начинают отвечать в стиле "RTFM" или "учи матчасть".
Говорите не интересно стало? Но я же даже в названии темы написал, что вопросы от ламера. Вот и пришлось это напомнить а также то, что и отвечающие когда-то тоже были ламерами.

P.S. А зря не хотите ответы. Ваши ответы мне нравились больше всего своей конкретностью, что всё "фтему". Ну не хотите и не надо. Просто не понимаю, почему если человек знает ответ на вопрос почему бы и не ответить? Из-за вредности?
singlskv
Цитата(Скопидор @ Apr 23 2009, 22:31) *
Да блин, достало. Вместо того, чтобы конкретно разъяснить начинают отвечать в стиле "RTFM" или "учи матчасть".
Говорите не интересно стало? Но я же даже в названии темы написал, что вопросы от ламера. Вот и пришлось это напомнить а также то, что и отвечающие когда-то тоже были ламерами.

P.S. А зря не хотите ответы. Ваши ответы мне нравились больше всего своей конкретностью, что всё "фтему". Ну не хотите и не надо. Просто не понимаю, почему если человек знает ответ на вопрос почему бы и не ответить? Из-за вредности?
up

Патаму-чта Вы в самом начале сказали что ответов в книжках не нашли,
но все остальные то нашли...

По раздельной компиляции,
все С(С++) файлы(исходники) собираются отдельно,
#include "..."
#include <...>
обычно означает включить объявления а не определения переменных и функций (исключения конечно есть,
но пока это не Ваш случай)

если Вы включаете по include просто С код, то тогда это просто разбиение кода на несколько файлов,
это дурной тон, но иногда делают и так...

.h(.hpp) файлы библиотек(iostream например) для того и нужны чтоб правильно прилинковать библиотеки
и указать на глобальныее переменные/вызовы функций которые там реализованны.

Так что раздельная компиляция это совсем не миф... smile.gif более того, это просто СТАНДАРТ.
AndreyKeil
Цитата(Скопидор @ Apr 24 2009, 00:31) *
Непонятно вот это:

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

А что не понятно? Код в библиотеке уже откомпилирован, т.е. он уже "готовый" (переведён в коды, понятные процессору). Поэтому он линкуется, т.е. присоединяется где надо при сборке.
sergeeff
Цитата(Скопидор @ Apr 23 2009, 21:31) *
Да блин, достало. Вместо того, чтобы конкретно разъяснить начинают отвечать в стиле "RTFM" или "учи матчасть".
Говорите не интересно стало? Но я же даже в названии темы написал, что вопросы от ламера. Вот и пришлось это напомнить а также то, что и отвечающие когда-то тоже были ламерами.

P.S. А зря не хотите ответы. Ваши ответы мне нравились больше всего своей конкретностью, что всё "фтему". Ну не хотите и не надо. Просто не понимаю, почему если человек знает ответ на вопрос почему бы и не ответить? Из-за вредности?


По-моему десять человек вам уже разъясняли, что к чему. Пояснения уже пошли по второму кругу. Вы внятно скажите, что не понятно. А то вопли молодежи "Не понятно!!!!!!" слегка начинают доставать своей нагловатостью.
rezident
Цитата(AndreyKeil @ Apr 24 2009, 00:57) *
А что не понятно? Код в библиотеке уже откомпилирован, т.е. он уже "готовый" (переведён в коды, понятные процессору). Поэтому он линкуется, т.е. присоединяется где надо при сборке.
Не совсем так. Библиотека может поставляться и в исходных текстах тоже. Тогда ее можно (править и) использовать также, как и другие исходные тексты. Использовать ли объектный библиотечный модуль или исходный текст библиотеки задается в опциях IDE или make. При использовании объектного кода библиотеки да, она только линкуется. При использовании исходного текста библиотеки она проходит весь цикл (препроцессор->компилятор->линкер) как и любой другой исходник.
Скопидор
Цитата(singlskv @ Apr 23 2009, 22:46) *
Патаму-чта Вы в самом начале сказали что ответов в книжках не нашли…

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

Цитата(singlskv @ Apr 23 2009, 22:46) *
… но все остальные то нашли...

Ещё не факт, что именно в книжках. Возможно, спросили у коллег в реале или на каком-нибудь форуме.

Повторяю, я ламер в C++, поэтому мои вопросы кому-то кажутся глупыми и раздражают. Я скажу этим товарищам: вспомните, что и вы когда-то были полным лузером и не осуждайте.
mdmitry
Какие книги смотрели?
У Страуструпа про заголовочные файлы написано, на мой взгляд, очень понятно. Я эту книгу перечитывал не один раз и не могу сказать,что знаю все детали. Время надо много для чтения и желателен карандаш.
Скопидор
Цитата(singlskv @ Apr 23 2009, 22:46) *
По раздельной компиляции,
все С(С++) файлы(исходники) собираются отдельно

Собираются в смысле компилируются (“Build”)? А где описываются «задание» компилятору, т.е. перечень CPP-файлов, подлежащих компиляции? В Makefile?
singlskv
Цитата(Скопидор @ Apr 23 2009, 23:34) *
Ещё не факт, что именно в книжках. Возможно, спросили у коллег в реале или на каком-нибудь форуме.

Повторяю, я ламер в C++, поэтому мои вопросы кому-то кажутся глупыми и раздражают. Я скажу этим товарищам: вспомните, что и вы когда-то были полным лузером и не осуждайте.
Раздражение здесь может быть только от одного, многим видно, что Вы не сделали и десятой доли усилий,
чтоб это познать самому без посторонней помощи...
Сделайте усилие над собой, а потом задавайте вопросы... и тогда Вам с удовольствием помогут.
SysRq
Стоило остановиться еще там:
Цитата(Скопидор @ Apr 15 2009, 11:47) *
В 2 этапа: сначала по отдельности компилируем все файлы (получаем OBJ-файлы), потом линкуем. Правильно?

Ну компилируем, линкуем, да. Как именно выполняется компиляция, линкование; что скрыто за этими терминами; результаты работы компилятора; результаты работы линкера?
Книги типа учебника по C++ для первого курса универа Т.А. Павловской с задорным страусом на обложке ессно вам ответов на эти вопросы не дадут! Берите литературу серьёзнее, раз вас интересует как оно изнутри устроено. Это даже вне C\C++ как языка. Это общий подход в языках выского уровня.

PS: вы ж разбираться не стали, но громко предлагаете синими буквами сомнительных наклонностей потрындеть о ваших догадках по этому вопросу; чего ж вы хотели кроме RTFM в ответ?..
Скопидор
Цитата(singlskv @ Apr 23 2009, 22:46) *
#include "..."
#include <...>
обычно означает включить объявления а не определения переменных и функций (исключения конечно есть,
но пока это не Ваш случай)

если Вы включаете по include просто С код, то тогда это просто разбиение кода на несколько файлов,
это дурной тон, но иногда делают и так...

.h(.hpp) файлы библиотек(iostream например) для того и нужны чтоб правильно прилинковать библиотеки
и указать на глобальныее переменные/вызовы функций которые там реализованны.

Так что раздельная компиляция это совсем не миф... smile.gif более того, это просто СТАНДАРТ.

Т.е. короче говоря, в библиотечных файлах (типа iostream) ВСЕГДА находятся только объявления (не определения) типов, переменных и т.п. и прототипы функций. Когда препроцессор, просматривая исходник, «утыкается» в директиву #include <iostream>, то он ВСЕГДА вставляет содержимое РЕАЛЬНО СУЩЕСТВУЮЩЕГО (в системной директории компилятора) файла iostream, содержащего только объявления, в исходник юзверя. Затем компилятор преобразует полученный после работы препроцессора файл в объектный модуль (формат ELF или COFF). При этом в этом файле сохраняются ссылки на объекты (т.е. переменные, типы и т.п.), определённые в других файлах. Затем компилятор преобразует в объектный код все остальные CPP-файлы проекта. После этого линкер, анализируя объектный файл, полученный после компиляции PRIMARY CPP-файла (т.е. файла содержащего main) «прилепливает» к нему код из объектных файлов системных библиотек и объектных файлов, полученных после компиляции всех других CPP-файлов, и получает исполняемый файл (экзешник для DOS и Win). При этом это ЛИНКЕР определяет какой код из системных библиотек «прилеплять», а какие не надо.

Я правильно понимаю?
singlskv
Цитата(Скопидор @ Apr 24 2009, 00:07) *
Т.е. короче говоря, в библиотечных файлах (типа iostream) ВСЕГДА находятся только объявления (не определения) типов, переменных и т.п. и прототипы функций.
....................
немного сумбурно у Вас получилось, но где-то так,
более подробно можно обсуждать только после подробного изучения Вами соответствующей документации...
sergeeff
Цитата(Скопидор @ Apr 23 2009, 23:07) *
Я правильно понимаю?


Почти правильно. Так оно и было, лет этак 30 тому назад. Сейчас этот процесс несколько усложнился тем, что include-файлы теперь включают :
1. inline функции, которые могут вызываться как функции, а может компилятор их текст включить в код вызывающей функции.

2. template шаблоны.

Но в общем процесс сборки программы вы уловили правильно.
Скопидор
Цитата(singlskv @ Apr 23 2009, 23:48) *
Раздражение здесь может быть только от одного, многим видно, что Вы не сделали и десятой доли усилий,
чтоб это познать самому без посторонней помощи...
Сделайте усилие над собой, а потом задавайте вопросы... и тогда Вам с удовольствием помогут.

Вы телепат?

Ну если 2 книги по C++, заученные чуть ли не наизусть - это по-Вашему не усилия, тогда я действительно не приложил НИКАКИХ усилий.
Просто у меня мало свободного времени читать книги десятками томов.

Вот и хотелось чтоб на каждый конкетный (может и глупый, как кажется некоторым с позиции их опыта) вопрос, такой же конкретный, и главное ОБОСНОВАННЫЙ ответ.
Я думал, что если человек что-то хорошо понимает, в чём-то хорошо разбирается, то ему не будет трудно это объяснить человеку, который пока это не понимает, но хочет понять

Цитата(singlskv @ Apr 24 2009, 00:13) *
...где-то так,
более подробно можно обсуждать только после подробного изучения Вами соответствующей документации...

О какой документации идёт речь?

В книгах, которые я читал, идеология раздельной компиляции и принципы «дробления» текста программного проекта по файлам, процесс раздельной компиляции и линковки программы описаны очень поверхностно, «в двух словах».
sergeeff
И в результате всей совместной деятельности форумчан и напряжения вашей головы, процесс сборки программы стал более понятен?
MrYuran
Цитата(Скопидор @ Apr 24 2009, 00:07) *
Т.е. короче говоря, в библиотечных файлах (типа iostream) ...

Я правильно понимаю?

В целом да, за исключением одной неточности:
библиотечные файлы (lib) содержат специально упакованный объектный код.
То, что вы подключаете инклудом - это не библиотечные, а заголовочные файлы, вот они и содержат всё что вы написали.
А код из библиотек подставляется на этапе линковки.
В заголовочных файлах С++ (hpp) могут содержаться описания классов, и это вроде как код, но на самом деле этот код виртуальный, а "материализуется" он в том месте, где вы объявляете экземпляр класса.
Вообще вместо разных умных (и глупых) книжек советую попробовать слепить какой-нибудь хелловорд в GCC, причём без разных навороченных оболочек. Просветление наступает очень быстро.

Кстати, будете смеяться, но большинство гуёвых прогеров, которые пользуются разными визуальными примочками типа дельфи-билдера, никогда не видели функцию main() biggrin.gif
Некоторые даже не подозревают, что она всё-таки существует
Скопидор
Цитата(sergeeff @ Apr 24 2009, 01:33) *
И в результате всей совместной деятельности форумчан и напряжения вашей головы, процесс сборки программы стал более понятен?

Да. И наверное не только мне, а всем прочим ламерам в C++, которые тоже только начинают изучение C++ и приходят на этот форум

P.S.Но смею Вас заверить, что достигнув некоторого уровня понимания процесса получения исполняемого файла из нескольких библиотечных и нескольких файлов юзверя, мои ламерские вопросы не закончатся smile.gif
Так что готовьтесь. smile.gif Тем более что на вопросы, которые я писал выше ответов так и не последовало (вопросы про enum, допустимые символы в строковом литерале и функцию main)

Цитата(MrYuran @ Apr 24 2009, 08:24) *
Вообще вместо разных умных (и глупых) книжек советую попробовать слепить какой-нибудь хелловорд в GCC, причём без разных навороченных оболочек. Просветление наступает очень быстро.

Да фазу «Хелло ворлда» я прошёл уже месяца 3 назад. После чего стал «копать глубже». А потом, я не понимаю, как, написав «Хелло ворлд», и получив исполняемый файл нажатием одной единственной кнопочки «Rebuild All» я пойму как оно там всё «в кишках» компилятора происходит? От меня же это всё скрыто. Я вижу только одну кнопочку.
Цитата(MrYuran @ Apr 24 2009, 08:24) *
Кстати, будете смеяться, но большинство гуёвых прогеров, которые пользуются разными визуальными примочками типа дельфи-билдера, никогда не видели функцию main() biggrin.gif
Некоторые даже не подозревают, что она всё-таки существует

Точно также как я не подозревал (до того как начал "копать") как происходит процесс создания исполняемого файла когда работал только с кнопкой "Rebuild All" biggrin.gif

И на вопрос «как происходит получение исполняемого файла» я совершенно искренне ответил бы «по нажатии кнопки 'Rebuild All'»

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

Цитата(MrYuran @ Apr 24 2009, 08:24) *
В целом да, за исключением одной неточности:
библиотечные файлы (lib) содержат специально упакованный объектный код.

И формат этого lib-файла отличается от формата объектника, получаемого после компиляции PRIMARY-файла (т.е. файла, содержащего main)?
А юзверь может дополнить системную библиотеку своими lib-файлами?
А «подправить» lib-файл коммерческого компилятора (типа Microsoft Visual C++) у юзверя есть возможноть?


////////////////////////////////////////
Цитата(MrYuran @ Apr 24 2009, 08:24) *
А код из библиотек подставляется на этапе линковки.

А как линкер узнаёт, какой код из объектников системных файлов нужно «пришить» к объектнику Primary-файла? Путём анализа содержимого объектника Primary-файла?

А отличается ли формат объектного файла Primary-файла от формата объектных файлов других CPP-файлов, входящих в проект?

А где можно почитать про формат объектных файлов (как системных {т.е. lib}, так и юзверя)?
mdmitry
Цитата(Скопидор @ Apr 24 2009, 00:26) *
Вы телепат?

Ну если 2 книги по C++, заученные чуть ли не наизусть - это по-Вашему не усилия, тогда я действительно не приложил НИКАКИХ усилий.
Просто у меня мало свободного времени читать книги десятками томов.

О какой документации идёт речь?

Возьмите книгу: Язык программирования С++, Бьерн Страуструп. Она тяжела для начинающего, но поняв, что написал автор языка про свое детище просветление наступит. Для понимания процесса сборки проекта почитайте документацию по GCC и make, хотя это тоже тяжело.

Вы так и не озвучили, какие книги использовали rolleyes.gif
Скопидор
Цитата(mdmitry @ Apr 24 2009, 12:09) *
Вы так и не озвучили, какие книги использовали rolleyes.gif
Книги по C++
andrew_b
Цитата(Скопидор @ Apr 24 2009, 13:03) *
Книги по C++

Не тролльте.
Скопидор
Цитата(andrew_b @ Apr 24 2009, 13:08) *
Не тролльте.

Вы тоже. bb-offtopic.gif
mdmitry
Цитата(Скопидор @ Apr 24 2009, 13:03) *
Книги по C++

На конкретный вопрос принято отвечать конкретно, поэтому участвовать в дальнейшем обсуждение для себя не считаю уместным.
Скопидор
Цитата(mdmitry @ Apr 24 2009, 13:34) *
участвовать в дальнейшем обсуждение для себя не считаю уместным.

"Хозяин - Барин"© biggrin.gif


Цитата(mdmitry @ Apr 24 2009, 13:34) *
На конкретный вопрос принято отвечать конкретно

А я разве не конкретно ответил?
P.S. А мне что некоторые как отвечали, когда я просил КОНКРЕТНЫХ ответов? А? Отвечали в стиле "RTFM", "Учи матчасть", "у тебя в голове - каша", "Читай книги" (как будто я их не читаю)
Скопидор
Цитата(Скопидор @ Apr 15 2009, 02:13) *
5.Если main – функция, то можно ли её рекурсивно вызвать внутри её самой?

Можно. Новички в C++!!! Кому надо привожу пример:
CODE
// Рекурсивные вызовы функции main из функции main
// Реально достигнутый максимальный уровень вложенности main равен 12302
// Компилятор: Microsoft Visual C++ версии 6.0
// ОС: Windows XP SP2
// main.cpp
// 15:05 24 апреля 2009 г.
//
#include <iostream>
using namespace std;

int i = 0;
const int Level_max = 12302; // Больше значение установить нельзя !!!

void main ()
{
if (i <= Level_max )
{
cout << "i = " << i << '\n'; // Выводим на экран значение счётчика уровня вложенности
i++; // Увеличиваем счётчик уровня вложенности
main (); // Вызываем рекурсивно main из main
}
}

// Получили на экране:

/*
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
.........
i = 12296
i = 12297
i = 12298
i = 12299
i = 12300
i = 12301
i = 12302
i = Press any key to continue
*/
SysRq
Новички C++!!! Это очень понятный язык! Кому надо привожу пример вычисления числа Пи (чем больше круг, тем точнее вычисляется):
Код
#define _ F-->00 || F-OO--;
long F=00,OO=00;
void F_OO() {
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
       _-_-_-_-_-_-_-_-_
            _-_-_-_
}
int main(){F_OO();printf("%1.3f\n", 4.*-F/OO/OO);}


(Извините, не мог не запостить...)
Скопидор
Цитата(SysRq @ Apr 24 2009, 17:48) *
Новички C++!!! Это очень понятный язык!

«Если язык хорошо знаком программистам, они работают более производительно.
Данные, полученные при помощи модели оценки Сосото II, показывают, что про-
программисты, использующие язык, с которым они работали три года или более, при-
примерно на 30% более продуктивны, чем программисты, обладающие аналогичным
опытом, но для которых язык является новым» © (Boehm et al., 2000).

Т.е. те, кого зачастую презрительно называют новичками, ламерами и т.п. всего лишь на 30% менее эффективны, чем профи. biggrin.gif
///////////////////////////////////////////
«Если вы работаете на конкурентном рынке ПО, половина ваших знаний устареет за три
года. Без обучения вы превратитесь в ископаемое.»
….
«Если программист не изучил С за год или два, еще три года
не сыграют особой роли»

© Макконэл «Совершенный код»
///////////////////////////////////////////

Модератор. Вы нарушаете п.3.1 Правил форума. Либо придерживайтесь обозначенной Вами темы, либо весь топик будет перемещен в раздел Общение - Off topics.
sergeeff
Цитата(Скопидор @ Apr 24 2009, 17:16) *
«Если язык хорошо знаком программистам, они работают более производительно.


Господа-товарищи, делающие всяческие подобные "научные" исследования просто поражают глубиной мысли. Слону понятно, что опытный работник работает более производительно, чем неопытный. Про 30% - вообще полная фигня. Код можно написать и даже запустить, но еще останется куча вопросов по его надежности, стабильности, отсутствию не очевидных ошибок периода выполнения и прочее. Какими процентами это можно подсчитать?

Я никак не могу в толк взять. Вы задаете вопросы про одно. Потом перескакиваете на всякие enum и рекурсивные вызовы main. Это вопросы из спортивного интереса или на работе делать нечего? Изучение лучше всего происходит при решении конкретных "живых" задач.

Вопрос про enum - это обычное приведение типов: int --> enum. Никто не запрещает это делать, но умные книги, которых вы уже ужас как много прочитали, все пишут про аккуратность приведения типов, чего и вам желаю использовать с оглядкой в будущей работе.

Приколистский тон ваших сообщений не будет способствовать получению вами полезных советов от знающих людей.

Хороших выходных.
Скопидор
Цитата(sergeeff @ Apr 24 2009, 20:09) *
Я никак не могу в толк взять. Вы задаете вопросы про одно. Потом перескакиваете на всякие enum и рекурсивные вызовы main. Это вопросы из спортивного интереса или на работе делать нечего?

Мне как раз есть делать что. Потому что мне нужно за неделю поднять свой уровень настолько, чтобы устроиться кодером C++. Поэтому я не тормоз, чтоб муссировать один и тот же вопрос неделями. У меня в голове крутиться одновременно тысячи вопросов, которые ищут ответа. И то, что я здесь задаю и что мне не понятно не составляет и сотой части того, что меня интересует.

Я понятно объяснил?
sergeeff
Понятно, хочется себя любимого втюхать кому-то как специалиста по С++. Успехов!
Скопидор
Цитата(sergeeff @ Apr 25 2009, 01:51) *
Понятно, хочется себя любимого втюхать кому-то как специалиста по С++. Успехов!

Уточняю: как НАЧИНАЮЩЕГО специалиста по C++ (блин на работу уже 2 месяца не могу устроится, а 4 моих детей кушать просят).
Но и реально знать C++ тоже хочу (ибо очень люблю процесс коддинга).
P.S. А что? По-Вашему нужно "тормозить" и муссировать один вопрос неделями? Ведь тема называется "Вопросы ...", а не "Вопрос..."
SysRq
Раз все выяснилось, предлагаю принять правила игры: конструктивно, вопрос-ответ, без синих букв, художеств, бессмысленных цитат. Правильная игра, полагаю, будет приветствована: в тривиальных вопросах может быть скрыто нетривиальное, -- и это интересно :)
Скопидор
Цитата(SysRq @ Apr 25 2009, 02:24) *
Раз все выяснилось, предлагаю принять правила игры: конструктивно, вопрос-ответ, без синих букв, художеств, бессмысленных цитат. Правильная игра, полагаю, будет приветствована: в тривиальных вопросах может быть скрыто нетривиальное, -- и это интересно smile.gif

Вот и договорились. Это уже конструктив пошёл.

////////////////////////////////////////////
Вопрос №200904250332
Почему мы пишем в проге на C++
Код
cout << "Hello, World!!!" << '\n'

и при выполнении программы курсор переиещается на следующую строку + переводится в начало строки

Но ведь служебный символ '\n' это символ 'Line feed', т.е. просто перевод на другую строку, без перемещения курсора в начало строки

Для перемещения строки в начало строки служит служебный символ '\r' ('Carriage return').

Т.е. по идее нужно было бы написать '\r\n'.

Тогда почему в строках C++ символ '\n' работает также как '\r\n'?
SysRq
Цитата(Скопидор @ Apr 25 2009, 03:32) *
Тогда почему в строках C++ символ '\n' работает также как '\r\n'?
Исторически так уж сложилось, что в Windows корректный переход на след. строку - это \r\n (CR + LF). Поэтому \n неявно дополняется до \r\n в текстовом режиме. В std определена константа endl, пользуйтесь вместо явного '\n'.
При записи в файл бинарных данных, не забывайте указывать что файл бинарный (там где это возможно, напр. fopen("file", "wb")), иначе оно тоже дополнит..
Andy Nikiforovv
Кто удаляет из исходника камменты (перед компиляцией) и склеивает строки разделённые символом склейки (\)? Компилятор или препроцессор? И где почитать инфу по «расколбасу» исходника прежде чем он достаётся собственно компилятору?

Относительно main.
Правда ли, что допустимы только две формы main:
int main ( int narg, char **arg) и void main (void) ?

Почему не меняется размер экзешника при последовательном заремливании строк снизу вверх?

Код
#include <iostream>
using namespace std;

void main ()
{
    cout << "Hello, World" << endl;        // 528 442 Байт Причём ENDL не катит (т.е. регистрочувствительный идентификатор)
    cout << "Hello, Moskau" << endl;       // 528 442 Байт
    cout << "Hello, Moskau2" << '\n';        // 528 442 Байт
    cout << "Hello, Moskau3" << "\r\n";    // 528 442 Байт '\r\n' не работает; А "\r\n" работает также как '\n' и endl
    cout << "Hello, Moskau4" << endl;        // 528 442 Байт
sergeeff
Цитата(Andy Nikiforovv @ Apr 27 2009, 23:14) *
Кто удаляет из исходника камменты (перед компиляцией) и склеивает строки разделённые символом склейки (\)? Компилятор или препроцессор? И где почитать инфу по «расколбасу» исходника прежде чем он достаётся собственно компилятору?


А на кой вам это понадобилось знать, если не секрет? Это что влияет на скорость вращения Земли или скорость написания/отладки программ?
Andy Nikiforovv
Написано, что параметры командной строки для Borland C++ 3.1 должны разделяться пробелами. А как быть если в параметре есть пробел?

Дайте определения (в контексте языков программирования) терминов "лексика", "синтаксис", "семантика" и "грамматика".

Я заметил, что некоторые ключевые слова регистронезависимы. А в книжках пишут, что в C++ все идентификаторы регистрозависимы. Объясните в чем дело.

Как сделать так, чтобы под константу (const) не выделялась память?

Почему сделано так, что литералу 40000 компилятор приписывает тип LONG, а не unsigned int?

Функция (операция?) ЗайзэАф (sizeof) считает размер переменной/ константы с учётом выравнивания на границу слова или без учёта оного?

Цитата(Andy Nikiforovv @ Apr 27 2009, 23:14) *
Код
#include <iostream>
using namespace std;

void main ()
{
    cout << "Hello, World" << endl;        // 528 442 Байт Причём ENDL не катит (т.е. регистрочувствительный идентификатор)
    cout << "Hello, Moskau" << endl;       // 528 442 Байт
    cout << "Hello, Moskau2" << '\n';        // 528 442 Байт
    cout << "Hello, Moskau3" << "\r\n";    // 528 442 Байт '\r\n' не работает; А "\r\n" работает также как '\n' и endl
    cout << "Hello, Moskau4" << endl;        // 528 442 Байт

Почему в этом исходнике "дофени" что писать: '\n' или "\r\n"? Результат один и тот же

Я написал (в консольном приложении) cout << '\a' а звука всё равно я не услышал. В чём фишка?

char i ;
имеет диапозон 0...255? Т.е. без знака? в отличии от int, которое по умолчанию со знаком?

Какие операции допустимы над строками (символьными массивами) в "чистом" C++ (без библиотечных функций)?

Какие преимущества использования манипулятора endl (кроме очистки буфера потока) по сравнению с использованием '\n'?

Можно ли определить была ли очищена динамическая память, на которую указывает указатель или нет? Ну, типа, после delete указатель должен указывать не NILL? Или по стандарту это не гарантируется?

Освобождение динамической памяти из-под массив происходит по команде delete []. А как менеджер кучи узнаёт сколько байт нужно освободить?
mdmitry
Цитата(Andy Nikiforovv @ Apr 27 2009, 23:14) *
Кто удаляет из исходника камменты (перед компиляцией) и склеивает строки разделённые символом склейки (\)? Компилятор или препроцессор? И где почитать инфу по «расколбасу» исходника прежде чем он достаётся собственно компилятору?

Взять препроцессор , запустить и посмотреть результат. Вопрос отпадет.


Цитата(Andy Nikiforovv @ Apr 28 2009, 00:14) *
Дайте определения (в контексте языков программирования) терминов "лексика", "синтаксис", "семантика" и "грамматика".

Участники форума не на экзамене, чтобы допускать подобные формулировки.

Цитата
Почему сделано так, что литералу 40000 компилятор приписывает тип LONG, а не unsigned int?

int и long для win32 одно и тоже.

Цитата
Можно ли определить была ли очищена динамическая память, на которую указывает указатель или нет? Ну, типа, после delete указатель должен указывать не NILL? Или по стандарту это не гарантируется?
Освобождение динамической памяти из-под массив происходит по команде delete []. А как менеджер кучи узнаёт сколько байт нужно освободить?

У Строуструпа это рассмотрено в соответствующем разделе.

Какие книги по языку С++ Вы используете?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.