Показаны сообщения с ярлыком cpp programming. Показать все сообщения
Показаны сообщения с ярлыком cpp programming. Показать все сообщения

суббота, 20 февраля 2010 г.

Переопределим printf

Иногда бывает так, что printf ничего не выводит. Видимо, это из-за того, что она пишет в буфер, который по каким-то причинам не вываливает содержимое в stdout. Чтобы принудительно очистить это буфер используется fflush(stdout).

Логично переопределить printf как printf + fflush. Сложность в том, что у printf переменное число аргументов. если написать
#define printf(A) printf(A); fflush(stdout);
а потом задать строку форматирования с несколькими аргументами, компилятор ругнется, что-де слишком много параметров у макроса printf(A).

Решается это так (нашел в интернете)
#define printf(A) printf A; fflush(stdout);
printf(("t%d: RRJ in %d\n",TRED, t1));

Тут важно, что вызывать printf надо с ДВОЙНЫМИ скобками.

понедельник, 28 декабря 2009 г.

Static в С

Всегда у меня этот static какие-то затруднения вызывал, а на самом деле все просто.

Если в модуле глобальная переменная объявлена static, то она видна только из этого модуля. То же самое, если static стоит в объявлении функции.

Если в функции локальная переменная объявлена static, то она сохраняет свое значение между вызовами функций. Инициализируется только один раз. Вот пример - скользящее среднее:

double average(double x)
{
static double count = 0;
static double sum = 0;

++count;
sum += x;

return sum/count;
}

int main()
{
cout << "average = " << average(1) << endl;
cout << "average = " << average(2) << endl;
cout << "average = " << average(4) << endl;
}

В функции average переменные count и sum будут инициализированы нулями только при первом вызове функции. Можно объявлять в разных функциях статические переменные с одинаковыми именами - компилятор следит за соответсвием.

Ой, а вот тут нашел на YouTube как дядька под гармошку на площади поет Русское поле экспериментов чуть ли не лучше Летова: http://www.youtube.com/watch?v=Bxhx1tlzn44

вторник, 15 декабря 2009 г.

Sleep на языке C

Вот как можно реализовать функцию задержки на n секунд

#include time.h

/* Pauses for a specified number of milliseconds. */
void sleep( clock_t wait )
{
clock_t goal;
goal = wait + clock();
while( goal > clock() );
}

вторник, 1 сентября 2009 г.

МетаПрограммирование в C++

Если вам встретился кусок кода типа
template
class R2RProblem
{
typedef typename T::SomeType S;
public:
void Foo(S& anS)
{ /* modify anS */ }
};
[такое можно найти, например, в библиотеках Boost и MTL],
читайте следующие статьи Томаса Беккера (не брат ли Бориса:)?)
на сайте Dr. Dobbs
[кстати, очень интересный портал о программировании]:

STL & Generic Programming: C++ Template Metaprogramming

и

STL & Generic Programming - More on C++ Metaprogramming


понедельник, 12 января 2009 г.

Ссылка - С++

Когда одолевает тупнячок за монитором, люблю я поискать что-нибудь в Интернете.
Вот, сегодня нашел сайт "настольной поисковой системы". Создатели сайта выложили часть исходников системы, а также всякие материалы для Cpp-девелоперов. Не пропадать же добру -вот ссылки

Руководство по STL
Библиотека Boost

Кстати, Boost - это около 100 (!) библиотек. В частности, есть библиотека для работы с регулярными выражениями. А библиотека Boost Graph - для работы с графами, а не с графикой.