Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 25.11.2008 | Доступ: свободный | Студентов: 9592 / 1296 | Оценка: 4.06 / 3.66 | Длительность: 21:16:00
Лекция 13:

Дополнительные сведения о системе программирования Borland C++ 3.1

< Лекция 12 || Лекция 13: 12 || Лекция 14 >

12.2. Компилятор bcc.exe

В состав системы программирования включен компилятор командной строки bcc.exe. К его услугам прибегают опытные программисты в тех случаях, когда необходимо создать достаточно большую программу. Под управлением MS-DOS из 640 килобайт задаче доступно максимум 580 – 610 Кб (часть занята компонентами операционной системы и оболочки типа Norton Commander), но интегрированная среда отнимает из этого объема памяти еще порядка 300 Кб.

Командная строка по запуску автономного компилятора имеет следующий вид:

>bcc [ключи] file1 file2 ...

Список ключей, управляющих работой компилятора, приведен в табл.12.2. Для отключения режима надо использовать дополнительный минус после ключа (например -K- вместо -K ).

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

  • если файл задан с расширением .obj, то он подключается как объектный файл на стадии компоновки исполняемого модуля;
  • если файл задан с расширением .lib, то он подключается как библиотека объектных модулей на стадии компоновки исполняемого модуля;
  • если файл задан с расширением .asm, то для его компиляции будет вызван транслятор с языка Ассемблер – TASM.EXE.
  • файлы без расширений или с расширениями, отличными от перечисленных, рассматриваются как тексты исходных программ, написанных на языках C, C++, и обрабатываются компилятором.
Таблица 12.2.
Ключ Пояснение Режимы по умолчанию
-1 Использовать команды процессора 80186/286
-2 Использовать команды процессора 80286 в защищенном режиме
-Ax Запретить расширения
-B Компилировать, используя ассемблер
-C Разрешить вложенные комментарии
-Dxxx Определить макро
-Exxx Задать имя альтернативного компилятора с ассемблера
-G Оптимизировать программу по скорости
-Hxxx Использовать прекомпилированные заголовочные файлы
-Ixxx Задать каталог с подключаемыми файлами
-K Считать тип char по умолчанию беззнаковым
-Lxxx Задать каталог с библиотеками
-M Генерировать карту распределения памяти
-N Контролировать переполнение стека
-Ox Использовать указанную оптимизацию
-P Отдать предпочтение компилятору C++ (даже если исходный модуль имел расширение .c )
-Qxxx Контролировать использование памяти
-S Генерировать программу на ассемблере
-Txxx Установить опции компилятора с ассемблера
-Uxxx Отменить действие макро
-Vx Контролировать таблицу виртуальных адресов
-Wxxx Создать приложение Windows
-X Не создавать файл адресных ссылок
-Yx Управлять загрузкой оверлеев
-Z Запретить перезагрузку регистров
-a Распределять память по границе слова
-b Рассматривать тип данных enum как целые числа да
-c Только компилировать
-d Объединять дублирующиеся строки
-exxx Задание имени исполняемого файла
-fxx Задание опций с плавающей запятой
-gN Останов после N предупреждений
-iN Задание максимальной длины идентификаторов
-jN Останов после N ошибок
-k Установка стандартной конфигурации стека
-lx Установка опций редактора связей
-mx Установка модели памяти
-nxxx Задание каталога для результирующего файла
-oxxx Задание имени объектного файла
-p Передавать параметры функций в соответствии с соглашениями Паскаля
-r Использование регистровых переменных да
-u Добавлять подчерк к именам внешних меток да
-v Отладка на уровне исходного текста
-wxxx Контроль предупреждений
-y Генерировать информацию о номерах строк
-zxxx Задание имен сегментов

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

12.3. Утилита grep.com поиска в текстовых файлах

В состав систем программирования BC 3.1 и BCB входит очень мощная поисковая утилита grep.com. Ее имя образовано от аббревиатуры, которая в ранних руководствах представлялась как Global Regular Expression Print –Печать Глобальных Регулярных Выражений. В новых руководствах предложена более прогрессивная комбинация слов – Generalized Regular Expression Parser – Обобщенный Грамматический Разбор Регулярных Выражений. Так или иначе, в обеих аббревиатурах присутствует термин регулярные выражения. С простейшими представителями регулярных выражений встречался практически каждый программист, который искал или копировал файлы с именами типа *.txt или ?set.txt. В этих именах символ * обозначал цепочку любых символов (в том числе и цепочку нулевой длины), а знак ? заменял любой одиночный символ.

Утилита запускается из командной строки со следующим набором параметров:

>grep [ключи поиска] поисковый_образ область_поиска

Ключи поиска представляют собой одиночные буквы или цепочки букв, которым предшествует символ '–'. Например, –A -D. Вслед за буквой может находиться знак минус (опция отключена) или знак плюс (опция включена). По умолчанию –R эквивалентно –R+. В ключах большие и малые буквы эквивалентны. Смежные ключи могут объединяться в группы: -C -D -I эквивалентно -CDI или -CI -D. В некоторых случаях порядок ключей может оказаться важным, т.к. действия одного могут поглощать действия другого. Список ключей и расшифровка устанавливаемых ими режимов поиска приведены в табл. 12.3.

Таблица 12.3.
Ключ Назначение
-C- Выводить только количество совпадений в каждом файле без указания номеров строк. Без этой опции номера строк выдаются.
-D+ Производить поиск с заходом в подкаталоги. Без указания пути и без ключа -D поиск производится только в текущем каталоге.
-I+ Игнорировать разницу между большими и малыми буквами (по умолчанию большие и малые буквы различаются).
-L- Выводить только имена файлов, где обнаружен поисковый образ
-N- Выводить номера строк в файлах, где обнаружен поисковый образ
-O- Выводить сообщения в формате Unix
-R+ Искать регулярные выражения
-U- Изменить стандартные опции поиска, действующие в GREP по умолчанию, и сохранить новые опции в grep.com
-V- Инверсный поиск – выдаются только те строки, в которых поисковый образ не содержится.
-W- Поиск слова. По умолчанию слово состоит из букв, цифр и символа подчерк Все остальные символы рассматриваются как разделители слов.
-Z- Более подробный вывод – имя файла, число совпадений (даже если оно равно 0)

Поисковый образ S1S2...Sk может быть представлен просто словом, текстом, заключенным в кавычки (если в поисковом образе есть пробелы или табуляторные пропуски), или регулярным выражением. Если используется ключ -R, то поисковый образ представляет регулярное выражение, в котором присутствуют специальные символы, имеющие следующий смысл:

  • "^S1S2...Sk" символ "крышка" (caret) перед поисковым образом означает, что результат поиска должен находиться в начале строки;
  • "S1S2...Sk$" символ доллара после поискового образа означает, что результат поиска должен находиться в конце строки;
  • . точка заменяет любой символ;
  • \ слэш предшествует символу, который ищется (например, \. означает поиск точки);
  • * предшествующий символ может встретиться 0 или большее число раз (например, qw* означает поиск q, qw, qww, qwww, ...);
  • + предшествующий символ может встретиться 1 или большее число раз (например, qw+ означает поиск qw, qww, qwww, ...);
  • [*alpha;1*alpha;2... *alpha;k] должен встретиться хотя бы один из символов, указанных в скобках;
  • [^*alpha;1*alpha;2... *alpha;k] не должен встретиться ни один из символов, указанных в скобках;

В поисковом множестве можно задавать диапазоны подряд идущих символов:

  • [0-9] все цифры;
  • [a-jx -z] малые буквы от a до j, x ,y, z

Очень полезная возможность открывается ключом -u. Вы можете скопировать утилиту grep.com в свой каталог и произвести там нужную настройку режимов поиска с последующим запоминанием удобной для вас комбинации ключей в теле модуля grep. После этого можно уже не набирать эту последовательность ключей при повторных поисках.

Поиск осуществляется среди тех файлов и каталогов, которые указаны в конце командной строки. Например:

>grep -W fun1 *.c *.cpp

В этом случае производится поиск слова fun1 в текущем каталоге среди всех файлов с расширениями .c и .cpp.

>grep -D "my book" \*.doc

В этом случае область поиска – файлы с расширением .doc в корневом каталоге и всех его подкаталогах. Так как поисковый образ содержит пробелы, то он заключен в кавычки.

Для поиска тех или иных идентификаторов в большом количестве программ удобно создать bat-файл, например, с именем grep.bat:

grep.com -i -d -w -n %1 *.c *.cpp > 1.txt

Такой файл запускается по команде:

grep.bat word

Здесь word – искомый идентификатор, он заменит в bat-файле параметр %1. Удобство заключается еще и в том, что результат поиска записывается в файл 1.txt, который можно в дальнейшем детально изучать. Смотреть результаты большого поиска на экране бывает не всегда удобно (да и объем выдаваемой информации может превысить емкость экрана).

< Лекция 12 || Лекция 13: 12 || Лекция 14 >
Alexey Ku
Alexey Ku

Попробуйте часть кода до слова main заменить на 

#include "stdafx.h" //1

#include <iostream> //2
#include <conio.h>

using namespace std; //3

Александр Талеев
Александр Талеев

#include <iostream.h>
#include <conio.h>
int main(void)
{
int a,b,max;
cout << "a=5";
cin >> a;
cout <<"b=3";
cin >> b;
if(a>b) max=a;
else max=b;
cout <<" max="<<max;
getch();
return 0;
}

при запуске в visual express выдает ошибки 

Ошибка    1    error C1083: Не удается открыть файл включение: iostream.h: No such file or directory    c:\users\саня\documents\visual studio 2012\projects\проект3\проект3\исходный код.cpp    1    1    Проект3

    2    IntelliSense: не удается открыть источник файл "iostream.h"    c:\Users\Саня\Documents\Visual Studio 2012\Projects\Проект3\Проект3\Исходный код.cpp    1    1    Проект3

    3    IntelliSense: идентификатор "cout" не определен    c:\Users\Саня\Documents\Visual Studio 2012\Projects\Проект3\Проект3\Исходный код.cpp    6    1    Проект3

    4    IntelliSense: идентификатор "cin" не определен    c:\Users\Саня\Documents\Visual Studio 2012\Projects\Проект3\Проект3\Исходный код.cpp    7    1    Проект3

при создании файла я выбрал пустой проект. Может нужно было выбрать консольное приложение?