интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056

В чём разница между заголовками <c***> и <***.h>?

16.10.2012, 03:10. Показов 9191. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пробовал несколько несложных примеров применения обоих вариантов. Результат выполнения идентичен. Компилятор никаких предупреждений не выдавал. Так в чём-же собственно разница? Ну не даром ведь переписали для С++ стандартные библиотеки С.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2012, 03:10
Ответы с готовыми решениями:

В чем разница между \n и \r
Здравствуйте. Собственно вопрос в название темы. Объясните, в чем разница между /n и /r?

В чем разница между . и ,
Вот столкнулся с таким вопросом вчем разница между . и , Привер &lt;? echo '&lt;pre&gt;',var_dump($array),'&lt;/pre&gt;'; ?&gt; ...

В чем разница между X x; и X x()?
Корректный ли этот ответ?

24
 Аватар для Кот Ангенс
320 / 270 / 128
Регистрация: 24.05.2012
Сообщений: 629
16.10.2012, 16:25
Лучший ответ Сообщение было отмечено как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от xtorne21st Посмотреть сообщение
Лично для меня до сих пор не понятно, в чём разница между компоновщиком и препроцессором?
Возьмем другой пример:
C++
1
2
3
4
5
6
7
#include <iostream>
#include <iostream>
#define print std::cout <<
 
int main() {
    print "Hello World";
}
Сначала работает препроцессор - он подключает файл iostream, в котором, помимо всего прочего, определен некий дефайн. Он мешает повторному включению, и ошибки не возникает. Далее находятся все отдельно стоящие слова print в исходнике и заменяются на "std::cout <<". Т. о. код приобретает следующий вид:
C++
1
2
3
4
5
//Содержимое файла <iostream>
 
int main() {
    std::cout << "Hello World";
}
После этого код обрабатывает компилятор. Он выделяет смысловые части (лексемы) и следит за тем, чтобы все переменные, функции etc были предварительно объявлены. В данном случае он проверяет существование объявления переменной std::cout, а также объявлений классов std::ostream, std::iostream и std::ios_base. На выходе компилятор генерирует объектный код, в котором вместо адресов памяти находятся символические имена.
Компоновщик (linker) просматривает все получившиеся объектные файлы и "связывает" их вместе. Он проверяет, чтобы каждая функция и переменная, к которой есть обращение, существовала в действительности. Например, в следующем коде ошибку выдаст не компилятор, а компоновщик:
C++
1
2
3
4
5
6
7
#include <iostream>
 
int myfunc();
 
int main() {
    std::cout << myfunc();//myfunc объявлена, но нигде не определена
}
Выходной файл у компоновщика - exe'шник.
3
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
16.10.2012, 16:58  [ТС]
Хорошее разъяснение, спасибо
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
16.10.2012, 17:42
Лучший ответ Сообщение было отмечено как решение

Решение

Препроцессор работает с текстом. Компоновщик - с объектными файлами с кодом. В файле stdio.h описаны только прототипы функций (printf, scanf и т.п.), а потому на этапе препроцессирования подцепляются только прототипы функций. Реализация в виде функций находится в библиотеке (т.е. в виде бинарников), и их уже подцепляет компоновщик. Прототип функции нужен для того, чтобы компилятор знал, по каким правилам надо формировать передачу параметров, дабы не получилось дурных эффектов навроде этого: Ссылки и указатели

Добавлено через 2 минуты
Вспомнил, что когда-то об этом писал подробно: Процесс компиляции

Добавлено через 4 минуты
И ещё одна полезная тема: С++ .h файли
3
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
16.10.2012, 17:55  [ТС]
Статья о препроцессоре и компиляции просто отлична! Спасибо автору
0
16.10.2012, 18:18

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Это действительно и для ДОСа. Просто с расширением было проще определять тип, не парся заголовок файла.)
Да не, это понятно. Я написал это к словам
Цитата Сообщение от Deviaphan Посмотреть сообщение
которые ничего не значат.
в досе убери расширение исполняемого файла, он тебе скажет, что файл не является исполняемым или формат не поддерживается :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2012, 18:18
Помогаю со студенческими работами здесь

В чём разница между .each() и $.each()
читаю про jquery и там есть .each() и $.each() в чем разница? Где можно прочитать про тонкости jquery? Давайте осмысленные названия...

В чем разница между С и С++
Возник вопрос в чем жи разница между С и С++ кроме того, что в С++ есть классы а в С их нету ?

В чем разница между [] и * ?
Думал, что ни в чем, но когда попытался сделать так: (в файле 1) char lc; в файле 2: extern char* lc; Компилятор ругаться не стал,...

В чем разница между ^p и ^13
Заменой сделал строку с ^p и строку с ^13 с Подстановочными знаками. Если поместить курсор на строку с ^13, то курсор станет за знаком...

В чем разница между С++ и С?
Чем отличается С и С++, кроме того что С++ есть ООП?


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru