Skip to main content

Posts

Showing posts with the label C

Интересности #1

Build a digital clock in Conway's Game of Life Статья  Let’s stop copying C  и ответ на нее  Let’s Stop Bashing C Where’s the Template?  - работая над модернизацией galib наткнулся на разные модели инстанцирования шаблонов, больше имеет исторический интерес, наверное. Наша Вселенная просто потрясающе большая, ум даже отказывается адекватно воспринимать подобные размеры.  humanity is not the only time technological intelligence has evolved SEI CERT C++ Coding Standard по объему больше чем книга  The Rust Programming Language   Читаю http://maxim.livejournal.com но не понимаю

Empire strikes back: Steven Dewhurst's response to Linus's criticism against C++

Помните нападки Линуса на С++ о которых я когда-то писал ? Когда он в довольно жесткой форме высказался в отношении того, что он думает о С++? Ну вот Steven Dewhurst ему отвечает: I think it's only fair to point out that Linus' diatribe is more than a year old, and he has spoken in more measured and printable tones elsewhere about the same subject. Less excusable, however, is that he makes the claim that C++ cannot be used in resource-constrained areas with nothing but anecdotal evidence to support his claim. Linus has done good work and has earned his soap box, but he also has a professional obligation to make sense while he’s holding forth. (For those who follow such things, this is an instance of Gotcha #12, “Adolescent Behavior,” from C++ Gotchas.) The argument that abstraction and efficiency are mutually-exclusive or that they're mutually exclusive in the context of C++ is demonstrably false. Lately, much of my work involves writing embedded code in C++ with heavy us...

Задачка на собеседование

Многие у себя в блогах публикуют разные головоломные задачки, а тут как раз сегодня у сотрудника возникла ситуация над которой мы некоторое время помедитировали, пока не пришел nimblemag и не обьяснил. Код, собственно, ниже. Код рабочий. Обьяснить почему работает. #include <cstdlib> #include <iostream> using namespace std; int main (int argc, char** argv){ cout<<argv[argc-1]<<endl <<argc[argv-1]<<endl; return EXIT_SUCCESS; } Ответ ниже белым по белому (да, такой способ я у Эльдара Мусаева подсмотрел) чтоб посмотреть выделяем текст ===отсюда=== На самом деле все просто и вытекает из комутативности операции сложения: #include <cstdlib> #include <iostream> using namespace std; int main (int argc, char** argv){ cout<<(*argv+(argc-1))<<endl<<((argc-1)+*argv)<<endl; cout<<*(argv+(argc-1))<<endl<<*((argc-1)+argv)<<endl; return EXIT_SUCCESS; } ===досюда=== Отдельное Спасибо White Knight ...

C and C++ Secure Coding Standard

По ссылке с OpenNet набрел на готовящийся к выходу неформальный стандарт по безопасному кодированию на С и С++ . Довольно приличное колличество информации собрано в одном месте, что, естественно, радует. Стоит прочтения, единственное, что меня раздражало - это жутко неудобная система навигации по разделам. Хотелось бы заполучить это все в plain html или в pdf. Может когда вычитают, сделают. Будем надеяться. В общем рекомендую всем, кому приходится писать на этих языках (впрочем некоторые правила применимы и не только к С с С++). Надо добавить линки в C & C++ useful resources .

Линус критикует C++

Via aruslan узнал об ответе Линуса на вопрос Dmitry Kakurin почему Git написан на С а не на С++. Больше всего понравились цитаты Quite frankly, even if the choice of C were to do *nothing* but keep the C++ programmers out, that in itself would be a huge reason to use C. Что и говорить, тут трудно не согласиться, поскольку многие программеры на С++ считают себя сильно "мегакрутыми" (коими в действительности не являются) для того чтобы снизойти до чистого С. Это действительно хороший способ :-) C++ leads to really really bad design choices. You invariably start using the "nice" library features of the language like STL and Boost and other total and utter crap, that may "help" you program, but causes: - infinite amounts of pain when they don't work (and anybody who tells me that STL and especially Boost are stable and portable is just so full of BS that it's not even funny) - inefficient abstracted programming models where two years down the road you...

О чем молчит printf

Недавно, читая книгу Диомидиса Спинеллиса "Анализ программного кода на примере проектов Open Source" , узнал что функция printf возвращает результат - количество фактически выведенных символов. Посмотрел в мане и стандарте на язык С - таки да "The printf function returns the number of characters transmitted, or a negative value if an output or encoding error occurred". А я то всегда думал что она void. И практически повсеместно встречал ее использование без проверки возвращаемого значения. К чему это может привести? Это может привести к тому, что в ходе выполнения программы может возникнуть ошибка, которая пройдет незамеченной (в лучшем случае). Вообще все функции вывода - в частности, при перенаправлении стандартного потока вывода в файл - могут завершиться аварийно по целому ряду причин: на устройстве, куда перенаправляется вывод, может не хватить свободного места может исчерпаться квота пользователя на объем дискового пространства процесс может попытаться з...

Ypa-a-a-a-a-a-a-a-a-a!!!!!!!!!!!!!!!!!!!!!

Сегодня у меня двойная, нет даже тройная радость! Спешу ею поделиться. Во-первых - наконец появились результаты конкурса Programmania 2007 (номер моей анкеты - 126). Не может не радовать, то, что мой профессиональный уровень возрос (205 баллов против 140 ранее). Результат по сравнению с прошлым годом (точнее не с прошлым годом, а с 17 апреля, когда компания Validio проводила у нас в университете анкетирование, которое также включало в себя тестирование ): Раздел ранее сейчас Classic C++ (C++/STL) 40/100 58,3/100 Object-Oriented Design 34/100 50/100 Unix Administration - 10/100 English 66/100 56,7/100 Логические задачи 0/100 30/100 Итого: 140 баллов 205 баллов Итого с 17 апреля по 6 октября - рост довольно приличный, на мой вз...

C & C++ useful resources

Stadardization Committees JTC1/SC22/WG21 - The C++ Standards Committee JTC1/SC22/WG14 - C Secure Coding Guidelines CERT C++ Secure Coding Standard CERT C Secure Coding Standard Upcoming C++ Standard Related Links Wikipedia - C++0x - here u will find more links ;-) Новый стандарт C++: C++09, Что нас ожидает... Guru Bjarne Stroustrup Bjarne Stroustrup's Homepage - here u will find even more c++ related links . BTW here is the four-part interview with Bjarne Stroustrup, the designer and original implementer of C++, discusses many aspects of C++ programming style: Part I: The C++ Style Sweet Spot Part II: Modern C++ Style Part III: Abstraction and Efficiency Part IV: Elegance and Other Design Ideals An Interview with Bjarne Stroustrup. March 27, 2008 by DDJ Herb Sutter Herb Sutter homepage Sutter's Mill: Herb Sutter on software, hardware, and concurrency Scott Meyers Scott Meyers homepage Nicolai Josuttis Nicolai Josuttis homepage Andrei Alexan...

Quine

Когда то у нас в университете одним из заданий на курсовой проект было написать программу печатающую свой собственный код. Так тогда это задание никто и не взял себе. И вот недавно, вспомнив об этом, решил поискать в сети. Оказалось, что подобные программы называются Куайн ( Quine ) и программисты иногда ради забавы соревнуются кто же напишет максимально короткий куайн. Ниже пример с Wikipedia:

std::string vs. const char* . Comparison

Захотелось мне как-то узнать какие строки сравниваются быстрее - С-строки или STL. Да и Страуструп помнится в своей книге писал, что STL строки скорее всего реализованы эффективнее. Решил провести небольшой бенчмарк. Один тестовый случай заключался в 1000 сравнении 2х строк. Продолжительность каждого тестового случая измерялась. Тест состоял из набора в 1000000 тестовых случаев. После проведения теста время сравнения усреднялось. Результаты оказались довольно занятными.

Внешне указатели, сокеты внутри

Программирование сетевых и многозадачных приложений довольно трудная задача, так как в данной области довольно часто возникают нетривиальные ошибки, которые очень редко проявляются и их очень затруднительно воспроизвести. Типичный пример - потеря соединения. Пусть у нас имеется следующий код:

Инициализация структур

В стандарте С99 (6.7.8) есть интересная вещь - так называемые designators (обозначения?). Их использование позволяет инициализировать элементы структур при помощи списка инициализации не обращая внимания на порядок следования элементов. Например struct StTest { int i; char c; double d; }; int main(int argc, char *argv[]) { struct StTest st1={.d=0.1, .i=1, .c='a'}, st2={.c='b',.d=0.2,.i=2}; printf("st1.i= %d st1.c= %c st1.d= %f\n",st1.i,st1.c,st1.d); printf("st2.i= %d st2.c= %c st2.d= %f\n",st2.i,st2.c,st2.d); return EXIT_SUCCESS; } А вот собственно и результат работы такой програмки commander@a64:$ ./teststructinit st1.i= 1 st1.c= a st1.d= 0.100000 st2.i= 2 st2.c= b st2.d= 0.200000 Такая вещь бывает очень полезна, так как нет необходимости помнить порядок следования элементов структуры.