Содержание
- 2. Многофайловые программы Запуск gcc позволяет обработать файл с исходным кодом препроцессором и далее скомпилировать его. Однако
- 3. Для программ, состоящих из одного файла, такой необходимости нет. Хотя при желании здесь также можно отказаться
- 4. Для программ, состоящих из нескольких файлов исходного кода, получение объектных файлов является необходимым. Именно из них
- 5. Компиляция программы, состоящей из нескольких файлов исходного кода Рассмотрим пример. Пусть в одном файле определена пара
- 6. Файл main.c: #include #define N 5 main () { int A[N]; int i; for(i=0; i scanf("%d",
- 7. Чтобы получить исполняемый файл этой программы, надо сначала получить объектные файлы из исходных: gcc -c superprint.c
- 8. Далее их можно скомпилировать в один исполняемый файл так: gcc -o myprint main.o superprint.o или так:
- 9. Задумаемся, каким образом в представленной выше программе функция main() "узнает" о существовании функций l2r() и r2l().
- 10. Создание заголовочных файлов Что будет, если в функции main() осуществить неправильный вызов функций l2r() и r2l()?
- 11. Куда правильней сообщать о неверном вызове функций уже при получении объектного файла. Поэтому хотя можно обойтись
- 12. Все прототипы (объявления) функций проекта, а также совместно используемые символические константы и макросы выносят в отдельный
- 13. Технология сборки библиотеки В языке программирования C код библиотек представляет собой функции, размещенные в файлах, которые
- 14. Библиотеки бывают двух видов — статические и динамические. Код первых при компиляции полностью входит в состав
- 15. Пример создания библиотеки В операционных системах GNU/Linux имена файлов библиотек должны иметь префикс "lib", статические библиотеки
- 16. В файле figure.c содержатся две функции — rect() и diagonals(). Первая принимает в качестве аргументов символ
- 17. Исходный код библиотеки Файл figures.c #include "stdafx.h" void rect (char sign, int width, int height) {
- 18. for (i=0; i putchar('\n'); } void diagonals (char sign, int width) { int i, j; for
- 19. Заголовочный файл Файл mylib.h: void rect (char sign, int width, int height); void diagonals (char sign,
- 20. Создание статической библиотеки 1)Перейдем в каталог library (команда cd) 2)Получаем объектные файлы: gcc -c ./source/*.c В
- 21. 3)Далее используем утилиту ar для создания статической библиотеки: ar r libmy1.a *.o Параметр r позволяет вставить
- 22. В итоге содержимое каталога library должно выглядеть так: libmy1.a mylib.h , где libmy1.a — это статическая
- 23. Файл proba.c #include "stdio.h" #include "mylib.h" int main( ) { rect('-',25,6); printf("\n\n"); rect('+',25,3); printf("\n\n"); diagonals ('~',
- 24. Компиляция проекта со статической библиотекой: gcc -o project *.o -L../library -lmy1 Начало команды должно быть понятно:
- 25. Создание динамической библиотеки Объектные файлы для динамической библиотеки компилируются особым образом. Они должны содержать так называемый
- 26. В отличие от статической библиотеки динамическую создают при помощи gcc указав опцию -shared: gcc -shared -o
- 27. Компиляция проекта с динамической библиотекой Теперь удалим исполняемый файл и получим его уже связанным с динамической
- 28. Работа с файлами Файлы представляют собой именованные области внешней (дисковой) памяти, с которыми программы могут обмениваться
- 29. Работа с файлами складывается из трех шагов: 1. Файл открывается. Это означает, что программа "захватывает" заданный
- 30. Файлы позволяют пользователю считывать большие объемы данных непосредственно с диска, не вводя их с клавиатуры. Существуют
- 31. Для работы с файлами в программах используется специальный тип данных – структура FILE, предназначенная для хранения
- 32. 1) Открытие файла fl=fopen("путь к файлу","режим работы файла"); Параметр "путь к файлу" указывает размещение файла на
- 33. Пример открытия файла для записи: FILE * fo; fo = fopen("test.txt", "w"); Можно задать и полный
- 34. Одновременно с открытием файла можно проверять, успешно ли это сделано: if( (fo=fopen("c:\tmp\test.txt","w")) == 0 ) {
- 35. В С++ файл можно открыть для чтения и/или записи в текстовом или бинарном (двоичном) режиме. Поэтому
- 36. 2) Обработка открытого файла Для ввода/вывода в С++ используются следующие функции: Чтение (ввод) Запись (вывод) fgetc()
- 37. Работа с текстовыми файлами Файлы бывают текстовые (в которых можно записывать только буквы, цифры) и двоичные
- 38. Рассмотрим пример вывода в файл значения переменной: #include "stdio.h" int _tmain(int argc, _TCHAR* argv[]) {int n=10;
- 39. Проверка признака конца файла Так как при каждой операции ввода/вывода происходит перемещение указателя в файле, в
- 40. Функции ввода/вывода 1)Посимвольный ввод/вывод:fgetc()/fputc() Функция getc() выбирает из файла очередной символ; ей нужно только знать указатель
- 41. Пример1. Текст из файла my_char.txt выводится на экран. #include "stdafx.h" int main() {FILE *ptr; //описание указателя
- 42. 2) Построковый ввод/вывод:fgets()/fputs() Функция fputs( ) записывает строку символов в файл. Она отличается от функции puts(
- 43. #include "stdio.h" #include "string.h" int _tmain(int argc, _TCHAR* argv[]) {int n=10; char st[25]; FILE *fo; fo
- 44. 2) форматированный ввод/вывод:fscanf()/fprintf() Чтение из файла выполняет функция fscanf(): fscanf(f,”строка формата”,список адресов перем-х); где f –файловая
- 45. Пример 3. Записать массив в файл: #include "stdio.h " int main() { int i; int array[]={5,15,135,3};
- 46. Функция remove( ) удаляет файл с заданным именем: remove("my_file.txt"); Здесь "my_file.txt" – имя удаляемого файла. При
- 47. Функция rename( ) переименовывает существующий файл : rename("old_file.txt", "new_file.txt"); Пример 4. Файл содержит текст в котором
- 48. while (!feof(f)) //Цикл пока не конец файла { ch=fgetc(f); // Чтение символа ch из файла if
- 49. Обработка бинарных файлов Если файл открыт в бинарном режиме, его можно записывать или считывать побайтно. Бинарный
- 50. где fp - указатель на файл; count - номер байта относительно заданной позиции, начиная с которого
- 51. Функции ввода-вывода для бинарных файлов Функция fread( ) предназначена для чтения блоков данных из потока: fread(
- 52. Функция fwrite( ) предназначена для записи в файл блоков данных: fwrite(ptr, size, n, fp); Она добавляет
- 53. Пример 5. Составим программу создания нового файла с информацией о городах: код, название, численность жителей. #include
- 54. f=fopen("file1.dat","wb"); //открытие для записи printf("\n Ввод информации о городе "); do { printf("\nКод: "); scanf("%d", &t.kod);
- 55. Пример 6. Вывести на экран список городов, количество жителей в которых превышает миллион человек. #include "stdio.h
- 56. f=fopen("file1.dat","rb"); //открытие файла для чтения fread(&t, sizeof(t), 1, f); //чтение из файла t while (!feof(f)) {
- 57. Редактирование бинарного файла #include #include #include struct tov { char name[10]; float c; int kol;} t1;
- 58. int main() { char c; FILE *tf; while (1) { printf("\n"); puts(" 1 sozdanie"); puts(" 2
- 59. switch(c) { case '1': tf=fopen("file1.dat","wb");input(tf); break; case '2': tf=fopen("file1.dat","rb"); print(tf); break; case '3': tf=fopen("file1.dat","ab");app(tf); break; case
- 60. void input(FILE *tf) { char ch; printf("\n vvod\n"); do { printf("\n name: "); scanf("%s", t1.name); printf("
- 61. void print(FILE *tf) { int i; i=1; fread(&t1, sizeof(t1), 1, tf); while (!feof(tf)) { printf("\n %3d
- 62. void app(FILE *tf) { char ch; printf("\n vvod \n"); do { printf("\n name: "); scanf("%s", t1.name);
- 63. void find(FILE *tf) { char c,tov[10]; long int i; puts(" vvod name: "); gets(tov); fread(&t1, sizeof(t1),
- 64. { printf("\n kol: "); scanf("%d", &t1.kol); printf("\n cena: "); scanf("%f", &t1.c); i=sizeof(t1); fseek(tf, -i, 1); fwrite(&t1,
- 66. Скачать презентацию