Группа SE (Кринкин М) — различия между версиями
Материал из SEWiki
Krinkin.m (обсуждение | вклад) |
Krinkin.m (обсуждение | вклад) (→Ссылки) |
||
| Строка 8: | Строка 8: | ||
[http://valgrind.org/ сайт Valgrind] | [http://valgrind.org/ сайт Valgrind] | ||
| + | |||
| + | [http://cppcheck.sourceforge.net/ простенький статический анализатор кода] | ||
== Полезности == | == Полезности == | ||
Версия 15:53, 11 октября 2013
Содержание
Ссылки
человеческая документация по C++
простенький статический анализатор кода
Полезности
Полезные флаги компилятора (g++/clang++)
- -Wall - повышает уровень проверок компилятора, при этом компилятор выдает большое число предупреждений
- -Werror - все предупреждения будут интерпретироваться компилятором как ошибки
- -pedantic - проверка кода на соответствие стандарту (какому именно зависит от флага -std)
- -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__*/