Команды препроцессора c. Директивы препроцессора

01.04.2019

Итак, чем отличается сетевой принтер от простого локального? Локальный принтер имеет возможность подключения только к одному компьютеру, в то время как сетевой принтер доступен любому компьютеру в сети. И здесь мы рассмотрим, как подключить сетевой принтер на ОС Windows 7, как настроить сетевой принтер (на примере модели epson), а также как сделать обычный принтер сетевым, и какие проблемы возникают при самостоятельной установке девайса.

Как подключить сетевой принтер?

Принтер может быть с завода сетевым (то есть иметь разъем сетевой платы RJ45) - такой принтер напрямую подключается к сети и требует только настройки сетевой карты и установки ПО на конечном компьютере.

Современные сетевые принтеры поддерживают два вида подключений к сети: это беспроводное соединение и проводное.

Для того чтобы настроить беспроводное подключение сетевого принтера вам необходимо зайти в настройки принтера.

Рассмотрим установку сетевого принтера на примере модели Hp.

Для этого на ЖК-дисплее принтера найдите вкладку «Setup».

Затем выберите пункт «Wi-Fi Settings»

Откроется новое окно, в котором вам нужно выбрать будет выбрать вкладку « Wi –Fi setup wizard», что означает мастер установки беспроводной сети.

Теперь нужно выбрать имя вашей беспроводной сети и ввести пароль.

Если вы все правильно сделали, то на панели принтера загорится значок Wi-Fi (что означает успешное подключение к сети).

Если же у вас проводное соединение, то необходимо на тыльной стороне принтера найти гнездо подключения к сетевому интерфейсу LAN:

И подключить один конец сетевого кабеля к принтеру, а другой, соответственно, к модему или компьютеру.

Как настроить сетевой принтер в windows 7?

Разобравшись с подключением сетевого принтера, теперь стоит перейти непосредственно к его настройке в операционной системе Windows.

Для этого зайдите в меню «Пуск» и кликните по вкладке «Устройства и принтеры»

В открывшемся окне выберите вкладку « Установка принтера»

Затем нужно будет выбрать вкладку «Добавить сетевой, беспроводной принтер» и нажать далее.

После недолго поиска система предложит вам выбрать принтер - на что вы должны будете согласиться. Произойдет установка драйверов с интернета, а затем появится сообщение, что принтер удачно установлен.

Также можно воспользоваться установочным диском, который входит в поставку принтера (если, конечно, он у вас есть).

Как сделать принтер сетевым?

Принтер, не имеющий прямого доступа к сети (не оснащенный сетевой картой) можно сделать сетевым, подключив его USB или LPT кабелем к сетевому компьютеру или .

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

Как настроить сетевой принтер на компьютере, к которому он подключен?

Настройка сетевого принтера в Windows 7 и на ОС Windows XP будет одинакова. Чтобы сделать принтер сетевым вам, прежде всего, потребуется установить драйвер этого принтера с диска из базовой комплектации принтера (либо скачать софт с сайта производителя).

После окончания установки драйвера необходимо открыть общий доступ к установленному принтеру:

  • - Пуск -> Панель управления -> Устройства и принтеры;
  • - Щелкните правой клавишей мышки на нужном принтере и перейдите в «Свойства принтера»;
  • - Во вкладке «Доступ» поставьте галочку на «Общий доступ к данному принтеру».

А вот настройка сетевого принтера на Windows 8 и Windows 10 будет несколько отличаться. Но только в том, что выход в «Панель управления» осуществляется через боковое меню (отведите мышку вправо «до упора» и выберите «Параметры», а затем «Панель управления») или через адресную строку открытой папки.

Как подключить сетевой принтер через роутер?

Основное условие для создания сетевого принтера через роутер заключается в том, что ваш маршрутизатор должен поддерживать функцию Print Server (сетевая печать).

Кроме того, следует удостовериться на сайте производителя роутера (либо в приложенной к нему инструкции), поддерживает ли он работу с данной моделью принтера.

Если условия соблюдены, то необходимо выключить роутер и принтер.

После чего подключите принтер к роутеру и включите питание вначале роутера, а затем - принтера.

Как узнать IP адрес принтера в сети?

Данную информацию можно узнать либо из настроек сетевого принтера (если он подключен в сеть на прямую), либо он будет совпадать с через которое он подключен к сети (компьютера или роутера).

Как подключиться к принтеру по локальной сети?

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

Для этого:

  • - В адресной строке любой открытой папки прописываем «\\x.x.x.x» где «x.x.x.x» это IP адрес вашего принтера.
  • - Далее в открывшемся окне двойным щелчком левой клавиши мыши выбираем нужный вам принтер.
  • - Вероятнее всего, при установке принтера вам потребуется диск с драйверам на ваш принтер.
  • - После окончания установки вы можете указать его для использования по умолчанию.

Не печатает сетевой принтер: возможные проблемы.

Если вы точно выполнили изложенные выше инструкции, то вот вероятные причины того, что принтер не печатает по локальной сети:

  • - нет подключения к локальной сети либо вашего компьютера, либо сетевого принтера;
  • - отключено устройство посредник (роутер или компьютер);
  • - кроме того, может возникнуть «стандартный набор» неисправностей в работе принтера (замятие бумаги, отсутствие бумаги, отсутствие картриджа, низкий уровень чернил или тонера).

Одной из основных причин, заставляющих пользователей устанавливать ЛВС, является возможность коллективного использования периферийных устройств, включая жесткие диски и печатные устройства. Помимо файл-серверов в сети применяются серверы печати.

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

Для одновременной обработки нескольких пользователей СП имеет средство, которое называется спул . Спул представляет собой аппаратный или программный механизм (или сочетание и того и другого) и используется лдя управления буферами печати. Буфер печати хранит данные до передачи их непосредственно на сетевой принтер, что позволяет накапливать задания на печать в случае, если рпинтер занят другим пользователем. По мере освобождения буфера производится подкачка (spooling) данных с сервера печати, где все задания устанавливаются в очередь, т.е. ожидают доступа к печатному устройству. Большинство серверов печати имеют средства, позволяющие присваивать заданиям приоритеты.

  1. Принципы сетевой печати

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

Программные средства сервера печати обрабатывают все поступающие задания. Если печатающее устройство свободно, то документ может быть распечатан немедленно; в противном случае он будет передан на хранение в файл печати, который находится на жестком диске сервера.

Основой всего процесса печати является переадресация печатающего устройства. В ЛВС переадресация выполняется сетевой ОС.

Необходимость организации спула связана с двумя причинами.

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

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

Помимо спула сервер печати имеет также буфер печати, который представляет собой часть оперативной памяти, которая используется для печати заданий на печатное устройство с заданной скоростью. Непосредственно перед передачей на распечатку данные находятся в буфере, ожидая своей очереди. Чем больше буфер, тем быстрее процесс печати, т.к. для считывания файла требуется меньше обращений к диску.

Это и определяет различие между спулом и буфером. Спул представляет собой программно-аппартное устройство, которое хранит файлы для распечатки и передает их содержимое на печатающее устройство, когда оно готово. Таким образом, организация спула связана сколлективным использованием какого-либо периферийного устройства, в данном случае сетевого принтера. Буфер же представляет собой часть оперативной памяти сервера печати, в которой создаются данные при непосредственном взаимодействии компьютера и печатного устройства. Оба повышают эффективность печати.

На первый взгляд, все просто, но существует ряд проблем, с которыми сталкиваются при печати с ЛВС. Решить эти проблемы помогают специальные утилиты.

Директивы препроцессора

В C# определен ряд директив препроцессора, оказывающих влияние на интерпретацию исходного кода программы компилятором. Эти директивы определяют порядок интерпретации текста программы перед ее трансляцией в объектный код в том исходном файле, где они появляются. Термин директива препроцессора появился в связи с тем, что подобные инструкции по традиции обрабатывались на отдельной стадии компиляции, называемой препроцессором. Обрабатывать директивы на отдельной стадии препроцессора в современных компиляторах уже не нужно, но само ее название закрепилось.

Все директивы препроцессора начинаются со знака #. Кроме того, каждая директива препроцессора должна быть выделена в отдельную строку кода. Принимая во внимание современную объектно-ориентированную архитектуру языка C#, потребность в директивах препроцессора в нем не столь велика, как в языках программирования предыдущих поколений. Тем не менее они могут быть иногда полезными, особенно для условной компиляции. В этой статье все директивы препроцессора рассматриваются по очереди.

Директива #define

Директива #define определяет последовательность символов, называемую идентификатором. Присутствие или отсутствие идентификатора может быть определено с помощью директивы #if или #elif и поэтому используется для управления процессом компиляции. Ниже приведена общая форма директивы #define:

#define идентификатор

Обратите внимание на отсутствие точки с запятой в конце этого оператора. Между директивой #define и идентификатором может быть любое количество пробелов, но после самого идентификатора должен следовать только символ новой строки. Так, для определения идентификатора EXPERIMENTAL служит следующая директива:

#define EXPERIMENTAL

В C/C++ директива #define может использоваться для подстановки исходного текста, например для определения имени значения, а также для создания макрокоманд, похожих на функции. А в C# такое применение директивы #define не поддерживается. В этом языке директива #define служит только для определения идентификатора.

Директивы #if и #endif

Обе директивы, #if и #endif, допускают условную компиляцию последовательности кода в зависимости от истинного результата вычисления выражения, включающего в себя один или несколько идентификаторов. Идентификатор считается истинным, если он определен, а иначе - ложным. Так, если идентификатор определен директивой #define, то он будет оценен как истинный. Ниже приведена общая форма директивы #if:

#if идентификаторное_выражение последовательность операторов #endif

Если идентификаторное_выражение, следующее после директивы #if, истинно, то компилируется код (последовательность операторов), указываемый между ним и директивой #endif. В противном случае этот промежуточный код пропускается. Директива #endif обозначает конец блока директивы #if. Идентификаторное выражение может быть простым, как наименование идентификатора. В то же время в нем разрешается применение следующих операторов: !, ==, !=, && и ||, а также круглых скобок.

Ниже приведен пример применения упомянутых выше директив:

// Объявляем идентефикаторное выражение #define EXP #define TR using System; namespace ConsoleApplication1 { class Program { static void Main() { #if EXP Console.WriteLine("Проверка идентификатора EXP"); #endif #if EXP && TR Console.WriteLine("Проверка идентификатора EXP и TR"); #endif #if RES Console.WriteLine("Данный код не выполнится, т.к. такой идентификатор отсутствует"); #endif Console.ReadLine(); } } }

Директивы #else и #elif

Директива #else действует аналогично условному оператору else языка C#, определяя альтернативный ход выполнения программы, если этого не может сделать директива #if.

Обозначение #elif означает "иначе если", а сама директива #elif определяет последовательность условных операций if-else-if для многовариантной компиляции. После директивы #elif указывается идентификаторное выражение. Если это выражение истинно, то компилируется следующий далее кодовый блок, а остальные выражения директивы #elif не проверяются. В противном случае проверяется следующий по порядку блок. Если же ни одну из директив #elif не удается выполнить, то при наличии директивы #else выполняется последовательность кода, связанная с этой директивой, а иначе не компилируется ни один из кодовых блоков директивы #if.

Ниже приведена общая форма директивы #elif:

#if идентификаторное_выражение последовательность операторов #elif идентификаторное_выражение последовательность операторов #elif идентификаторное_выражение последовательность операторов //... #endif

Давайте добавим в предыдущий пример следующий код:

#if EXP Console.WriteLine("Проверка идентификатора EXP"); #endif #if EXP && TR Console.WriteLine("Проверка идентификатора EXP и TR"); #else Console.WriteLine("Данный код не выполнится"); #endif

Директива #undef

С помощью директивы #undef удаляется определенный ранее идентификатор. Это, по существу, означает, что он становится "неопределенным". Ниже приведена общая форма директивы #undef:

#undef идентификатор

Рассмотрим следующий пример кода

// Объявляем идентефикаторное выражение #define ID //удаляем идентификатор #undef ID using System; namespace ConsoleApplication1 { class Program { static void Main() { #if ID Console.WriteLine("Данное выражение не выполнится"); #endif Console.ReadLine(); } } }

Директива #undef применяется главным образом для локализации идентификаторов только в тех фрагментах кода, в которых они действительно требуются.

Директива #error

Директива #error вынуждает компилятор прервать компиляцию. Она служит в основном для отладки. Ниже приведена общая форма директивы #error:

#error сообщение_об_ошибке

Когда в коде встречается директива #error, выводится сообщение об ошибке. Например, когда компилятору встречается строка кода « #error Это тестовая ошибка! » компиляция прерывается и выводится сообщение "Это тестовая ошибка!".

Директива #warning

Директива #warning действует аналогично директиве #error, за исключением того, что она выводит предупреждение, а не ошибку. Следовательно, компиляция не прерывается. Ниже приведена общая форма директивы #warning:

#warning предупреждающее_сообщение

Директива #line

Директива #line задает номер строки и имя файла, содержащего эту директиву. Номер строки и имя файла используются при выводе ошибок или предупреждений во время компиляции. Ниже приведена общая форма директивы #line:

#line номер "имя_файла"

Имеются еще два варианта директивы #line. В первом из них она указывается с ключевым словом default, обозначающим возврат нумерации строк в исходное состояние, как в приведенном ниже примере:

#line default

А во втором варианте директива #line указывается с ключевым словом hidden. При пошаговой отладке программы строки кода, находящиеся между директивой #line hidden и следующей директивой #line без ключевого слова hidden, пропускаются отладчиком.