Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.02.2009, 16:14   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию Что такое директива препроцессора?

Здравствуйте проффесионалы! Объясните пожалуйста, что такое директива препроцессора, заумное слово но не могу понять, только начал изучать С++(тоесть отдельно что такое директива и что аткое препроцессор, как эти два термина взаимодействуют друг с другом). Ещё #include - расшифруйте пожалуйста и
#pragma hdrstop и что такое макрос в С++. Заранне благодарен за ответы.

Последний раз редактировалось prikolist; 10.02.2009 в 16:25.
prikolist вне форума
Старый 10.02.2009, 18:06   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Википедия
препроцессор — это компьютерная программа, принимающая данные на входе, и выдающая данные, предназначенные для входа другой программы, например, такой как компилятор.
Цитата:
Сообщение от Википедия
В программировании термин «директива» (указание) по использованию похож на термин «команда», так как так же используется для описания некоторых конструкций языка программирования (то есть указаний компилятору или ассемблеру особенностей обработки при компиляции).
Цитата:
Сообщение от Википедия
В языки программирования Си и C++ встроена поддержка препроцессора. Строки в исходном коде, которые должны быть обработаны препроцессором в виде #define и #include называются препроцессорными директивами.
Лично я врядли объясню понятнее.

Код:
#include <имя> или #include "имя"
Подключает к исходнику заданный заголовочный файл.

Цитата:
Сообщение от prikolist
#pragma hdrstop
С этим не сталкивался, поэтому точно не знаю. Цитата с одного форума:
Цитата:
- заканчивает список заголовочных файлов, попадающих в кешируемый precompiled заголовок.
Цитата:
Сообщение от Википедия
Макросы в языке Си преимущественно используются для определения небольших фрагментов кода. Во время обработки кода препроцессором, каждый макрос заменяется соответствующим ему определением. Если макрос имеет параметры, то они указываются в теле макроса; таким образом, макросы языка Си могут походить на Си-функции. Распространенная причина использования — избежание накладных расходов при вызове функции в простейших случаях, когда небольшого кода, вызываемого функцией, достаточно для ощутимого снижения производительности.
Код:
#define max(a,b) ((a) > (b) ? (a) : (b))
определяет макрос max, использующий два аргумента a и b. Этот макрос можно вызывать как любую Си-функцию, используя схожий синтаксис. То есть, после обработки препроцессором,
Код:
z = max(x,y);
становится
Код:
z = ((x) > (y) ? (x) : (y));
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 10.02.2009, 18:43   #3
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Большое спасибо, но можно ли в двух словах, просто я немного запутался. Напишите пожалуйста, кто знает. Что такое #include, Что она делает, и что в ней нужно прописывать? Тоесть отдельно это слово и зачем ставить решётку перед ним, и что прописывать после include надо.
Что такое отдельно слово "директива"? Что такое препроцессор, в 2 словах, какая его предназначенность. Мне говорили, что препроцессор - это часть кампилятора, и он заменяет один текст, другим текстом, это опытный программист, через аську писал, но он уже месяц не в сети. Но какой текст заменяет препроцессор каким не известно, и я не могу въехать. И ещё не знаю, что такое объектный код, зачем кампилятору, брать код программы делать в объектный код? Пожалуйста, дайте кто можно, точное изъяснение этих терминов, чтоб иметь представление об этом. Зараннее благодарю всех, кто что-то напишет по этому вопросу.

Последний раз редактировалось prikolist; 10.02.2009 в 18:46.
prikolist вне форума
Старый 10.02.2009, 19:18   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Что такое #include, Что она делает, и что в ней нужно прописывать?
Это одна из директив.. Она подключает заданный заголовочный файл.
Например,
Код:
#include <iostream>
#include <stdlib.h>
решетка как раз и говорит, что это директива
----------
Директива - что-то вроде команды (как я и написал в предыдущем посте).
Цитата:
Мне говорили, что препроцессор - это часть кампилятора, и он заменяет один текст, другим текстом,
Да, как раз такие вот директивы и заменяет.
Я же приводил пример!
Код:
#define max(a,b) ((a) > (b) ? (a) : (b))
И если потом написать
Код:
z = max(x,y);
после обработки препроцессором он заменится на
Код:
z = ((x) > (y) ? (x) : (y));
--------------------
Цитата:
но можно ли в двух словах, просто я немного запутался.
Не все вещи можно описать в двух словах, чтобы было понятно. имхо
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 10.02.2009, 20:53   #5
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Большое спасибо!!! Напишите пожалуйста что такое объктный код в С++, зачем он нужен, и препроцессор, кампилятор и компоновщик - это как 3 функции, одной программы, которая называется " Кампилятор " и встроенная в среду разработки С++ 6,0 или это три разные программы встроенные в С++. И последнее, вы говорили, что директивой называется комбинация #include, и что в неё подключают заголовочный файл, объясните пожалуйста, что за файлы, и какие файлы, что представляют собой файлы, что имеется ввиду? Благодарю зараннее.

Последний раз редактировалось prikolist; 10.02.2009 в 20:58.
prikolist вне форума
Старый 10.02.2009, 21:13   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Модератор: Вы уже 3 раза один и тот же вопрос задаете. Я думаю вам стоит для начала зайти хотя бы на Википедию и почитать. А уже потом вопросы задавать, если не понятно что-то. Или книгу хотя бы попробовать открыть.

Всю семантику и синтаксис языков C и C++ вам тут никто писать не будет. Научитесь сами разбираться в проблемах.
MaTBeu вне форума
Старый 11.02.2009, 09:06   #7
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Не знаю конечно, но если бы мне объяснили так, как написано в википедии (в предыдущих постах) я бы тоже ничего не понял =)) Попробую объяснить своими словами.

Когда вы написали исходный код программы и начинаете ее компилировать, на самом деле проходит 3 стадии. Сначала работает препроцессор (называется препроцессорная обработка), он заменяет все директивы в вашем коде на соответствующие значения (директива - это команда языка С\С++, начинающаяся со знака #, так же называется директива препроцессора). Далее следует 2 этап - работает компоновщик - он создает из вашего исходного кода объектный файл (*.obj или *.o). И в завершении работает непосредственно компилятор - он создает из объектных файлов исполняемую программу (в Windows *.exe). Так же во время компиляции происходит синтаксический анализ - компилятор проверяет ваш код на наличие синтаксических ошибок (и некоторых других), но это не принципиально для нас.
Теперь приведем пример - простейшая программа на Си
Код:
#include <stdio.h> /* Директива препроцессора */
int main(void)
{
       printf("Hello world");
       return 0;
}
Итак, сначала препроцессор заменяет директиву "#include <stdio.h>" на текст файла stdio.h (это стандартная библиотека языка Си, поставляется вместе с компилятором), то есть фактически в вашем коде, вместо одной строчки "#include <stdio.h>" будет все то, что написано в файле stdio.h, это нужно для того, что бы получить доступ к функциям ввода/вывода (в данном случаи функция printf). Таких библиотек в языке Си много, каждая отвечает за определенные задачи.
После препроцессорной обработки работает компоновщик, и создается *.obj файл. В этом файле, грубо говоря, "прописаны" связи всех внешних библиотек (в данном случаи stdio.h) и вашего исходного кода.
И потом, наконец, компилятор компилирует объектный файл, и получается готовая программа.

Надеюсь теперь все понятно =))
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 11.02.2009 в 09:09.
Blade вне форума
Старый 11.02.2009, 11:52   #8
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо за проффесиональный ответ, теперь я всё понял.
prikolist вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что такое константа? if-soft Паскаль, Turbo Pascal, PascalABC.NET 11 14.10.2008 19:19
Что такое множество? ZhekON Помощь студентам 3 07.04.2008 20:22
Что такое брандмаузер? ronich Помощь студентам 6 29.10.2007 08:49
то такое мастерство в программировании, что такое мастер программист и что он может? Cezar Свободное общение 29 02.06.2007 23:48
Что такое - Класс Умелец Свободное общение 1 04.04.2007 14:01