Группа SE (Кринкин М) — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(Ссылки)
Строка 8: Строка 8:
  
 
[http://valgrind.org/ сайт Valgrind]
 
[http://valgrind.org/ сайт Valgrind]
 +
 +
== Полезности ==
 +
 +
=== Полезные флаги компилятора (g++/clang++) ===
 +
 +
# -Wall - повышает уровень проверок компилятора, при этом компилятор выдает большое число предупреждений
 +
# -Werror - все предупреждения будут интерпретироваться компилятором как ошибки
 +
# -pedantic - проверка кода на соответствие стандарту (какому именно зависит от флага -std)
 +
# -Weffc++ - проверка некоторых рекомендаций из [http://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876 книги] (ничего не делает clang++)
 +
 +
=== Поиск утечек памяти с помощью Valgrind ===
 +
 +
Пусть a.out имя бинарного файла программы в текущем каталоге, тогда чтобы проверить использование памяти запускаем ее следующим образом:
 +
 +
    valgrind --tool=memcheck ./a.out
 +
 +
или просто:
 +
 +
    valgrind ./a.out
  
 
== Задания ==
 
== Задания ==

Версия 15:44, 11 октября 2013

Ссылки

рейтинг

стандарт на github

человеческая документация по C++

сайт Valgrind

Полезности

Полезные флаги компилятора (g++/clang++)

  1. -Wall - повышает уровень проверок компилятора, при этом компилятор выдает большое число предупреждений
  2. -Werror - все предупреждения будут интерпретироваться компилятором как ошибки
  3. -pedantic - проверка кода на соответствие стандарту (какому именно зависит от флага -std)
  4. -Weffc++ - проверка некоторых рекомендаций из книги (ничего не делает clang++)

Поиск утечек памяти с помощью Valgrind

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

   valgrind --tool=memcheck ./a.out

или просто:

   valgrind ./a.out 

Задания

Обертка над FILE

Требуется используя cstdio написать класс/структуру file. file должен позволять узнать статус потока ввода/вывода (ошибка, конец файла и т. д.), а также содержать набор методов для ввода/вывода строк и чисел. Так как копирование для такого класса операция не осмысленная (почему?), нужно запретить копирование объекта класса. Сигнатуры методов остаются на ваше усмотрение, для примера, это может выглядеть так (советую немного подумать и не повторять):

   #ifndef __FILE_H__
   #define __FILE_H__
   #include <string>
   class file {
   public:
       enum open_mode { Read, Write };
       file();
       explicit file(std::string const &fname, open_mode mode = Read);
       ~file();
       void open(std::string const &fname, open_mode mode = Read);
       void close();
       open_mode mode() const;
       bool opened() const;
       bool eof() const;
       bool error() const;
       size_t write(char const *buf, size_t size);
       size_t write(std::string const &str);
       size_t write(char value);
       size_t write(long value);
       size_t write(unsigned long value);
       size_t write(double value);
       size_t newline();
       size_t read(char *buf, size_t size);
       size_t read(std::string &word);
       size_t read(char &c);
       size_t read(long &value);
       size_t read(unsigned long &value);
       size_t read(double &value);
       size_t readline(std::string &line);
   };
   #endif /*__FILE_H__*/