Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056

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

16.10.2012, 03:10. Показов 9556. Ответов 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
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru