Операционная система UNIX. Руководство программиста

     

Пример программы


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

Приводимая в данном разделе выдача различных отладочных средств может несколько отличаться от выдачи Вашего компьютера. Для получения более подробной информации об этих командах лучше всего обратиться к Справочнику пользователя.

Сначала приведем содержимое файла restate.c, содержащего исходный текст главной программы.

/* Файл с главной программой -- restate.c */

#include <stdio.h> #include "recdef.h"

#define TRUE 1 #define FALSE 0

main (argc, argv) int argc; char *argv []; { FILE *fopen (), *fin; void exit (); int getopt (); int oflag = FALSE; int pflag = FALSE; int rflag = FALSE; int ch; struct rec first; extern int opterr; extern float oppty (), pft (), rfe ();

if (argc < 2) { (void) fprintf (stderr, "%s: Не указана опция\n", argv [0]); (void) fprintf (stderr, "Использование: %s -rpo\n", argv [0]); exit (2); }

opterr = FALSE;

while ((ch = getopt (argc, argv, "opr")) != EOF) { switch (ch) { case 'o': oflag = TRUE; break; case 'p': pflag = TRUE; break; case 'r': rflag = TRUE; break; default: (void) fprintf (stderr,"Использование: %s -opr\n", argv [0]); exit (2); } }

if ((fin = fopen ("info", "r")) == NULL) { (void) fprintf (stderr, "%s: Неудача при открытии файла %s\n", argv [0], "info"); exit (2); }

if (fscanf (fin, "%s%f%f%f%f%f%f", first.pname, &first.ppx, &first.dp, &first.i, &first.c, &first.t, &first.spx) != 7) { (void) fprintf (stderr, "%s: Неудача при чтении первой записи из %s\n", argv [0], "info"); exit (2); }

printf ("Наименование: %s\n", first.pname);




if (oflag) printf ("Приемлемая цена: $%#5.2f\n", oppty (&first));
if (pflag) printf ("Ожидаемая прибыль (потери): $%#7.2f\n", pft (&first));
if (rflag) printf("Фондоотдача: %#3.2f%%\n", rfe (&first)); }
Файл oppty. c содержит исходный текст одноименной функции.
/* Приемлемая цена -- oppty.c */
#include "recdef.h"
float oppty (ps) struct rec *ps; { return (ps->i/12 * ps->t * ps->dp); }
В файле pft.c описана функция для вычисления прибыли.
/* Прибыль -- pft.c */
#include "recdef.h"
float pft (ps) struct rec *ps; { return (ps->spx - ps->ppx + ps->c); }
В файле rfe.c описана функция для вычисления фондоотдачи.
/* Фондоотдача -- rfe.c */
#include "recdef.h"
float rfe (ps) struct rec *ps; { return (100 * (ps->spx - ps->c) / ps->spx); }
Наконец, приведем содержимое включаемого файла recdef.h.
/* Включаемый файл -- recdef.h */
struct rec { /* Структура для хранения исходных данных */ char pname [25]; float ppx; float dp; float i; float c; float t; float spx; };


Содержание раздела