<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5374517018413942275</id><updated>2011-11-27T16:38:34.390-08:00</updated><category term='C++'/><category term='C Python'/><category term='General'/><category term='C'/><title type='text'>Программирование на С и С++</title><subtitle type='html'>Блог посвящен программированию на языках C и С++. Рассматриваются вопросы, связанные с использованием функций, входящих в C99. Для С++ рассматривается стандарт 92 года и нововведения, которые войдут в следующий стандарт языка.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-6016244322131379443</id><published>2010-03-20T01:20:00.001-07:00</published><updated>2010-03-20T01:20:35.200-07:00</updated><title type='text'>Выделение памяти в stack</title><content type='html'>&lt;p&gt;Обычно при динамическом выделении памяти используется heap. Однако такое выделение возможно и в stack’е. Для этого можно использовать набор функций _malloca и _freea, которые задекларированы в заголовочном файле &lt;strong&gt;&lt;em&gt;memory.h&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Рассмотрим функцию &lt;strong&gt;&lt;em&gt;_malloc&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;void *_malloca( size_t size );&lt;/em&gt;&lt;/strong&gt; – size – размер выделяемой области памяти в байтах. Функция возвращает указатель на выделенную память. Если происходит ошибка, то возвращается нулевой указатель (NULL).&lt;/p&gt;  &lt;p&gt;Для освобождения памяти используется функция &lt;strong&gt;&lt;em&gt;_freea&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;void _freea( void *memblock );&lt;/em&gt;&lt;/strong&gt; – memblock – указатель на участок памяти, который нам необходимо освободить.&lt;/p&gt;  &lt;p&gt;Рассмотрим пример использования данных функций:&lt;/p&gt;  &lt;p&gt;#include &amp;lt;malloc.h&amp;gt;    &lt;br /&gt;#include &amp;lt;string.h&amp;gt;     &lt;br /&gt;int main(int argc, char* argv[])     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; char *p=(char *)_malloca(200);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(p){     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; char *str=&amp;quot;Hello, world!&amp;quot;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strcpy_s(p,200,str);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;%s&amp;quot;, p);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _freea(p);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Cannot allocate memory\n&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return 0;     &lt;br /&gt;}&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-6016244322131379443?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/6016244322131379443/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=6016244322131379443' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/6016244322131379443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/6016244322131379443'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2010/03/stack.html' title='Выделение памяти в stack'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-8460499746769507390</id><published>2009-12-12T16:04:00.000-08:00</published><updated>2009-12-12T16:15:17.474-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C Python'/><title type='text'>Python...</title><content type='html'>Изменим чуть-чуть сообщения блога. Посмотрим взаимодействие с python.&lt;br /&gt;&lt;br /&gt;В данном примере разберем обращение из python к библиотекам языка C.&lt;br /&gt;Например, создадим скрипт для доступа к printf из библиотеки libc.dylib (MacOS). Для организации данного доступа необходимо воспользоваться модулем python ctypes, который позволяет обращаться к функциям из c-библиотек.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from ctypes import *&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Загрузим библиотеку через CDLL:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;libc=CDLL("libc.dylib")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Вызовем функцию printf и закончим первый пример:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;message="Hello, world"&lt;br /&gt;i=libc.printf("First program: %s\n",message)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WFN56gdsfFI/SyQxxDFeMmI/AAAAAAAAAI4/2wGfEUBPyho/s1600-h/python1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 110px;" src="http://1.bp.blogspot.com/_WFN56gdsfFI/SyQxxDFeMmI/AAAAAAAAAI4/2wGfEUBPyho/s320/python1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5414507370717786722" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-8460499746769507390?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/8460499746769507390/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=8460499746769507390' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/8460499746769507390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/8460499746769507390'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2009/12/python.html' title='Python...'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_WFN56gdsfFI/SyQxxDFeMmI/AAAAAAAAAI4/2wGfEUBPyho/s72-c/python1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-6637209758368099875</id><published>2009-06-20T13:27:00.001-07:00</published><updated>2009-06-20T13:27:29.691-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Информация по изменениям...</title><content type='html'>Всю информацию по изменениям в блогах по программированию на различных языках, о добавлении новых презентаций, о начале новых курсов можно узнать через twitter: &lt;a href="http://twitter.com/alexeibo"&gt;AlexeiBo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-6637209758368099875?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/6637209758368099875/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=6637209758368099875' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/6637209758368099875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/6637209758368099875'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2009/06/blog-post.html' title='Информация по изменениям...'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-7948891948502926377</id><published>2009-05-07T08:42:00.000-07:00</published><updated>2009-05-07T08:44:20.510-07:00</updated><title type='text'>Презентации</title><content type='html'>Хотел бы напомнить, что презентации по темам, связанным с языками С и С++ и не только, доступны на ресурсе: &lt;br /&gt;&lt;a href="http://slideshare.net/albova"&gt;SlideShare&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-7948891948502926377?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/7948891948502926377/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=7948891948502926377' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7948891948502926377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7948891948502926377'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2009/05/blog-post_9745.html' title='Презентации'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-7335426969110016791</id><published>2009-05-07T08:28:00.000-07:00</published><updated>2009-05-07T08:42:50.893-07:00</updated><title type='text'>Продолжение работы со списками</title><content type='html'>Рассмотрим работу с одно связанным списком, но предположим, что в списке каждая предыдущая структура хранит указатель на последующую. В этом случае, как я упоминал ранее в предыдущем посте, надо хранить указатель на первую структуру в списке. Если мы потеряем первую структуру, то потеряем и элементы списка. А почему? Она - одно связанная, указатель - с предыдущей на последующую, а, следовательно, мы можем двигаться только от первой к последней структуре в списке. Иначе не получится! ;)&lt;br /&gt;А теперь код. Он похож на предыдущей, только вместо pLast и prev используем pFirst и next:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;typedef struct S2{int a; int b; S2* next;} S2_t;&lt;br /&gt;&lt;br /&gt; // одно связанный список&lt;br /&gt;&lt;br /&gt; S2_t *p2=0, *pLast2=0, *pFirst=0;&lt;br /&gt;&lt;br /&gt; //построение списка&lt;br /&gt;&lt;br /&gt; for(int i=0;i&lt;10;++i)&lt;br /&gt; {&lt;br /&gt;  p2=(S2_t *)malloc(sizeof(S2_t));&lt;br /&gt;  memset(p2,0,sizeof(S2_t));&lt;br /&gt;  p2-&gt;a=i;&lt;br /&gt;  p2-&gt;b=i+10;&lt;br /&gt;  if(pLast2)&lt;br /&gt;   pLast2-&gt;next=p2;&lt;br /&gt;  else&lt;br /&gt;   pFirst=p2;&lt;br /&gt;  pLast2=p2;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //работа со списком&lt;br /&gt;&lt;br /&gt; p2=pFirst;&lt;br /&gt; while(p2){&lt;br /&gt;  printf("a: %d b: %d\n", p2-&gt;a,p2-&gt;b);&lt;br /&gt;  p2=p2-&gt;next;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //Удаляем четные элементы&lt;br /&gt;&lt;br /&gt; p2=pFirst;&lt;br /&gt; S2_t* p22=pFirst;&lt;br /&gt; while(p2){&lt;br /&gt;  if(!(p2-&gt;a&amp;1)){&lt;br /&gt;   if(p2==pFirst){&lt;br /&gt;    p22=p2-&gt;next;&lt;br /&gt;    pFirst=p22;&lt;br /&gt;    free(p2);&lt;br /&gt;    p2=p22;&lt;br /&gt;   }else{&lt;br /&gt;    p22-&gt;next=p2-&gt;next;&lt;br /&gt;    free(p2);&lt;br /&gt;    p2=p22-&gt;next;&lt;br /&gt;   }&lt;br /&gt;  }else{&lt;br /&gt;   p22=p2;&lt;br /&gt;   p2=p2-&gt;next;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; printf("After removing:\n");&lt;br /&gt; p2=pFirst;&lt;br /&gt; while(p2){&lt;br /&gt;  printf("a: %d b: %d\n", p2-&gt;a,p2-&gt;b);&lt;br /&gt;  p2=p2-&gt;next;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; //удаление списка&lt;br /&gt;&lt;br /&gt; p2=pFirst;&lt;br /&gt; while(p2){&lt;br /&gt;  pFirst=p2-&gt;next;&lt;br /&gt;  free(p2);&lt;br /&gt;  p2=pFirst;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-7335426969110016791?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/7335426969110016791/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=7335426969110016791' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7335426969110016791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7335426969110016791'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2009/05/blog-post_07.html' title='Продолжение работы со списками'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-3669467090545068750</id><published>2009-05-07T08:00:00.000-07:00</published><updated>2009-05-07T08:17:39.393-07:00</updated><title type='text'>Работа с динамическими списками</title><content type='html'>Посмотрим как работают динамические списки. Из чего они состоят? Из структур, в каждой из которой есть указатель на предыдущую либо последующую. Это верно для одно связанных списков. У дву связанных есть указатель на предыдущую и последующую одновременно.&lt;br /&gt;Структура может выглядеть так:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;typedef struct S1{int a; int b; S1* prev;} S1_t; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;- имеет указатель на предыдущую&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;typedef struct S2{int a; int b; S2* next;} S2_t; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;- имеет указатель на последующую&lt;br /&gt;&lt;br /&gt;Построим для первой структуры список из 10 элементов:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; printf("first:\n");&lt;br /&gt; // односвязанный список&lt;br /&gt; S1_t *p1=0, *pLast=0;&lt;br /&gt; //построение списка&lt;br /&gt; for(int i=0;i&lt;10;++i)&lt;br /&gt; {&lt;br /&gt;  p1=(S1_t *)malloc(sizeof(S1_t));&lt;br /&gt;  memset(p1,0,sizeof(S1_t));&lt;br /&gt;  p1-&gt;a=i;&lt;br /&gt;  p1-&gt;b=i+10;&lt;br /&gt;  if(pLast)&lt;br /&gt;   p1-&gt;prev=pLast;&lt;br /&gt;  pLast=p1;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Выведем список на экран:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;br /&gt; p1=pLast;&lt;br /&gt; while(p1){&lt;br /&gt;  printf("a: %d b: %d\n", p1-&gt;a,p1-&gt;b);&lt;br /&gt;  p1=p1-&gt;prev;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Удалим из списка структуры, которые содержат первое нулевое поле либо четное:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;br /&gt; p1=pLast;&lt;br /&gt; S1_t* p11=pLast;&lt;br /&gt; while(p1){&lt;br /&gt;  if(!(p1-&gt;a&amp;1)){&lt;br /&gt;   if(p1==pLast){&lt;br /&gt;    p11=p1-&gt;prev;&lt;br /&gt;    pLast=p11;&lt;br /&gt;    free(p1);&lt;br /&gt;    p1=p11;&lt;br /&gt;   }else{&lt;br /&gt;    p11-&gt;prev=p1-&gt;prev;&lt;br /&gt;    free(p1);&lt;br /&gt;    p1=p11-&gt;prev;&lt;br /&gt;   }&lt;br /&gt;  }else{&lt;br /&gt;   p11=p1;&lt;br /&gt;   p1=p1-&gt;prev;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;После работы надо освободить память:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; p1=pLast;&lt;br /&gt; while(p1){&lt;br /&gt;  pLast=p1-&gt;prev;&lt;br /&gt;  free(p1);&lt;br /&gt;  p1=pLast;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;В начале работы со списком я всегда устанавливаю указатель &lt;span style="font-weight:bold;"&gt;p&lt;/span&gt;, с которым работаю, в начало списка.&lt;br /&gt;При работе с одно связанным списком главное хранить указатель на последний элемент списка, если в списке указатели в структурах указывают с последующей на предыдущую структуры.&lt;br /&gt;И надо хранить указатель на первую структуру в списке, если предыдущая структура хранит указатель на последующую.&lt;br /&gt;В следующем посте я приведу пример для такой структуры.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-3669467090545068750?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/3669467090545068750/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=3669467090545068750' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/3669467090545068750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/3669467090545068750'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2009/05/blog-post.html' title='Работа с динамическими списками'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-8068240179505161261</id><published>2008-11-17T12:35:00.000-08:00</published><updated>2008-11-17T12:48:31.605-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>__gnu_cxx и __verbose_terminate_handler</title><content type='html'>Отвлечемся от std. Рассмотрим пространство имен __gnu_cxx, в котором объявлен __verbose_terminate_handler, позволяющий получить больше информации о возникающей исключительной ситуации. Замечу, что это все тот же заголовочный файл exception.&lt;br /&gt;Рассмотрим следующий код:&lt;br /&gt;&lt;br /&gt;int main (int argc, char * const argv[]) {&lt;br /&gt;    std::cout &amp;lt;&amp;lt; "Hello, World!\n";&lt;br /&gt; std::set_terminate(__gnu_cxx::__verbose_terminate_handler);&lt;br /&gt; int k=120;&lt;br /&gt; if(k&amp;gt;100)&lt;br /&gt;  throw std::exception();&lt;br /&gt;  else&lt;br /&gt;  throw k;&lt;br /&gt; for(int i=k;i&amp;lt;1000;++i)&lt;br /&gt;  std::cout&amp;lt;&amp;lt;".";&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;На выходе получаем следующее:&lt;br /&gt;&lt;br /&gt;[Session started at 2008-11-17 23:42:53 +0300.]&lt;br /&gt;Hello, World!&lt;br /&gt;terminate called after throwing an instance of 'std::exception'&lt;br /&gt;  what():  St9exception&lt;br /&gt;&lt;br /&gt;Как видно из примера, при возникновении исключительной ситуации выводится дополнительная информация о ней, что в некоторых случаях может быть полезным.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-8068240179505161261?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/8068240179505161261/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=8068240179505161261' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/8068240179505161261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/8068240179505161261'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/gnucxx-verboseterminatehandler.html' title='__gnu_cxx и __verbose_terminate_handler'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-7621499385014694096</id><published>2008-11-17T12:11:00.000-08:00</published><updated>2008-11-17T12:23:13.931-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Использование set_terminate</title><content type='html'>Решил немного написать по поводу set_terminate.&lt;br /&gt;Функция set_terminate объявлена в заголовочном файле exception. Она имеет следующий вид:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;terminate_handler set_terminate(terminate_handler) throw()&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;В качестве параметра функция берет указатель на функцию, которая будет вызвана в случае терминирования программы.&lt;br /&gt;Данный указатель на функцию имеет следующий вид:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;void (* pF)(void)&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Если мы через функцию set_terminate устанавливаем новый обработчик, то она вернет нам старый, если ранее такой существовал для данной ситуации.&lt;br /&gt;Возникает вопрос: а зачем нужно использовать set_terminate? В ответ можно сказать только следующее, что при ошибке в программе, которая ведет к терминированию этой программы, может возникнуть необходимость сохранить данные, закрыть файлы, записать в лог информацию о причинах ошибки и т.д.&lt;br /&gt;В заключении привожу пример использования:&lt;br /&gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;exception&amp;gt;&lt;br /&gt;&lt;br /&gt;void func1()&lt;br /&gt;{&lt;br /&gt;std::cout&amp;lt;&amp;lt;"The end"&amp;lt;&amp;lt;std::endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main (int argc, char * const argv[]) {&lt;br /&gt;    std::cout&amp;lt;&amp;lt; "Hello, World!\n";&lt;br /&gt; std::set_terminate(func1);&lt;br /&gt; throw std::exception();&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; В результате работы программы получаем следующее: &lt;br /&gt;&lt;br /&gt;[Session started at 2008-11-17 23:10:04 +0300.]&lt;br /&gt;Hello, World!&lt;br /&gt;The end&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-7621499385014694096?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/7621499385014694096/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=7621499385014694096' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7621499385014694096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7621499385014694096'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/setterminate.html' title='Использование set_terminate'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-7477268961715930887</id><published>2008-11-10T04:42:00.001-08:00</published><updated>2008-11-10T04:56:37.037-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Книга по С++, которую я прочитал первой</title><content type='html'>Нашел я и книгу, которую прочитал первой при изучении языка С++. Она мне нравилась простотой и последовательностью изложения. Ее удобно использовать, изучая язык. Мне это в ней и нравилось. В настоящее время я, к сожалению, ее уже не имею в своем распоряжении, чтобы подробнее описать. Причина отсутствия: "подарил школьной библиотеке". Так что в школе, где я учился и работал, стало на одну книгу по С++ больше. "Отличный язык в широкие массы!!!".&lt;br /&gt;А вот и ссылка на книгу:&lt;br /&gt;&lt;a href="http://www.ozon.ru/context/detail/id/3223525/?partner=albova"&gt;&lt;img src="http://www.ozon.ru/multimedia/books_covers/1000501311.jpg" alt="Язык Си++" /&gt;&lt;br /&gt;В. В. Подбельский&lt;br /&gt;&lt;br /&gt;Язык Си++&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-7477268961715930887?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/7477268961715930887/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=7477268961715930887' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7477268961715930887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7477268961715930887'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/blog-post_6531.html' title='Книга по С++, которую я прочитал первой'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-5420728842356440066</id><published>2008-11-10T04:34:00.000-08:00</published><updated>2008-11-10T04:55:51.957-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Книга по С++</title><content type='html'>На вопрос: "Какую книгу почитать по С++?", я предлагаю прочитать книгу Бьерна Страуструпа. Книга интересная, глубокая. Можно прочитать ее поверхностно, выяснив только те вопросы, которые Вас интересуют, а можно копнуть глубоко, прочитав "от корки до корки". Использовать ее как справочник мне очень нравится. Четкое изложение, наличие примера - все что  надо для "прояснения вопроса".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ozon.ru/context/detail/id/85559/?partner=albova"&gt;&lt;img src="http://www.ozon.ru/multimedia/books_covers/mm592_19_07_01.jpg" alt="Язык программирования С++" /&gt;&lt;br /&gt;Бьерн Страуструп&lt;br /&gt;&lt;br /&gt;Язык программирования С++. Специальное издание&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Эту книгу я прочитал не первой, однако, купив ее, пользуюсь постоянно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-5420728842356440066?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/5420728842356440066/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=5420728842356440066' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/5420728842356440066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/5420728842356440066'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/blog-post_8574.html' title='Книга по С++'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-7342300555638393046</id><published>2008-11-10T04:08:00.000-08:00</published><updated>2008-11-10T04:31:54.412-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Перегрузка операторов перенаправления из потока и в поток</title><content type='html'>Когда мы используем вывод на консоль, то часто пишем следующий код:&lt;br /&gt;std::cout&amp;lt;&amp;lt;"Hello, world"&amp;lt;&amp;lt;std::endl&lt;br /&gt;&lt;br /&gt;Предположим, что мы создали класс следующего вида:&lt;br /&gt;class TestClass{&lt;br /&gt; public:&lt;br /&gt; TestClass();&lt;br /&gt; ~TestClass();&lt;br /&gt;private:&lt;br /&gt; int i;&lt;br /&gt; std::string s;&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;Для вывода содержимого класса на экран можно воспользоваться созданным специально для этого методом:&lt;br /&gt;class TestClass{&lt;br /&gt; public:&lt;br /&gt; TestClass();&lt;br /&gt; ~TestClass();&lt;br /&gt; void output(); // метод для вывода на консоль&lt;br /&gt;private:&lt;br /&gt; int i;&lt;br /&gt; std::string s;&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;void TestClass::output(){&lt;br /&gt; std::cout&amp;lt;&amp;lt;"i="&amp;lt;&amp;lt;i&amp;lt;&amp;lt;"s="&amp;lt;&amp;lt;s&amp;lt;&amp;lt;std::endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Тогда вывод для экземпляра будет выглядеть так:&lt;br /&gt;TestClass tc;&lt;br /&gt;tc.output();&lt;br /&gt;&lt;br /&gt;Такой вариант возможен, но он очень уж некрасив. Переопределим оператор перенаправления в поток, что позволит нам перенаправлять содержимое экземпляра класса в поток вывода:&lt;br /&gt;TestClass tc;&lt;br /&gt;std::cout&amp;lt;&amp;lt;tc&amp;lt;&amp;lt;std::endl;&lt;br /&gt;&lt;br /&gt;Для этого реализуем друга класса следующего вида:&lt;br /&gt;class TestClass{&lt;br /&gt; public:&lt;br /&gt; TestClass();&lt;br /&gt; ~TestClass();&lt;br /&gt; friend std::ostream&amp; operator&amp;lt;&amp;lt;(std::ostream&amp; out, const TestClass&amp; c);&lt;br /&gt;private:&lt;br /&gt; int i;&lt;br /&gt; std::string s;&lt;br /&gt; };&lt;br /&gt; std::ostream&amp; operator&amp;lt;&amp;lt;(std::ostream&amp; out, const TestClass&amp; c);&lt;br /&gt;&lt;br /&gt;Что содержится в теле данного оператора? В нем должен быть реализован функционал по перенаправлению полей класса в поток вывода, например:&lt;br /&gt;std::ostream&amp; operator&amp;lt;&amp;lt;(std::ostream&amp; out, const TestClass&amp; c)&lt;br /&gt;{&lt;br /&gt; out&amp;lt;&amp;lt;"i="&amp;lt;&amp;lt;c.i;&lt;br /&gt; out&amp;lt;&amp;lt;" s="&amp;lt;&amp;lt;c.s;&lt;br /&gt; return out;&lt;br /&gt;}&lt;br /&gt;Т.к. оператор является другом класса, то он имеет доступ к приватным полям класса, что не требует от нас делать их публичными.&lt;br /&gt;&lt;br /&gt;Теперь, используя написанный код, можно выводить содержимое класса на консоль:&lt;br /&gt;&lt;br /&gt;TestClass tc;&lt;br /&gt;std::cout&amp;lt;&amp;lt;tc&amp;lt;&amp;lt;std::endl;&lt;br /&gt;TestClass *p=new TestClass();&lt;br /&gt;std::cout&amp;lt;&amp;lt;"second: "&amp;lt;&amp;lt;*p&amp;lt;&amp;lt;std::endl;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-7342300555638393046?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/7342300555638393046/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=7342300555638393046' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7342300555638393046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7342300555638393046'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/blog-post_10.html' title='Перегрузка операторов перенаправления из потока и в поток'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-276412694766892795</id><published>2008-11-07T00:35:00.001-08:00</published><updated>2008-11-10T05:00:45.760-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Еще одна книга</title><content type='html'>Читать на русском хорошо. Но читать техническую литературу на английском приходится чаще. Можно попрактиковаться при чтении стандарта языка С на английском языке. Соответствующая ссылка приведена ниже:&lt;br /&gt;&lt;a href="http://www.ozon.ru/context/detail/id/1835234/?partner=albova"&gt;&lt;img src="http://www.ozon.ru/multimedia/books_covers/0470845732.01.lzzzzzzz.jpg" alt="The C Standard" /&gt;&lt;br /&gt;Standards Institute British &lt;br /&gt;The C Standard : Incorporating Technical Corrigendum 1&lt;/a&gt;&lt;br /&gt;Если успеете запастись данной книгой на выходные, то поделитесь своими впечатлениями на тему "Мои английские выходные".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-276412694766892795?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/276412694766892795/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=276412694766892795' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/276412694766892795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/276412694766892795'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/blog-post_8617.html' title='Еще одна книга'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-3630166153574459527</id><published>2008-11-07T00:20:00.001-08:00</published><updated>2008-11-10T05:00:33.637-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Интересная книга</title><content type='html'>Хочется поделиться еще одной интересной книгой, которая в настоящий момент доступна для чтения:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ozon.ru/context/detail/id/2699304/?partner=albova"&gt;&lt;img src="http://www.ozon.ru/multimedia/books_covers/1000356030.jpg" alt="C Primer Plus" /&gt;&lt;br /&gt;&lt;br /&gt;Стивен Прата &lt;br /&gt;&lt;br /&gt;Язык программирования C. Лекции и упражнения&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В данной книге очень хорошо и подробно рассмотрен язык. Уделено внимание рассмотрению конкретных примеров. В принципе, эта книга может быть интересно разноуровневым специалистам. Написана известным человеком в данной области. Так что книга "на выходные" есть.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-3630166153574459527?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/3630166153574459527/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=3630166153574459527' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/3630166153574459527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/3630166153574459527'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/blog-post_07.html' title='Интересная книга'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-3087579749058399910</id><published>2008-11-07T00:10:00.000-08:00</published><updated>2008-11-10T05:00:21.527-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Использование функции _Exit</title><content type='html'>Рассмотрим второй вариант завершения программы.&lt;br /&gt;&lt;br /&gt;Для завершения программы без вызова обработчиков, зарегистрированных  с помощью функции atexit, можно использовать функцию _Exit. Данная функция задекларирована следующим образом:&lt;br /&gt;void _Exit(int).&lt;br /&gt;&lt;br /&gt;В качестве параметра функция принимает код возврата, с которым программа и завершается. &lt;br /&gt;Как я уже упоминал: функции-обработчики не вызываются. Рассмотрим пример кода:&lt;br /&gt;&lt;br /&gt;int k=0;&lt;br /&gt;&lt;br /&gt;void exit1(){&lt;br /&gt; printf("At function exit1 %d\n",k++);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void exit2(){&lt;br /&gt; printf("At function exit2 %d\n",k++);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void exit3(){&lt;br /&gt; printf("At function exit3 %d\n",k++);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void exit4(){&lt;br /&gt; printf("At function exit4 %d\n", k++);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;typedef void (* Func_t)(void);&lt;br /&gt;&lt;br /&gt;int main (int argc, const char * argv[]) {&lt;br /&gt;&lt;br /&gt; Func_t arr[4]={exit1, exit2, exit3, exit4};&lt;br /&gt;&lt;br /&gt; int i=0;&lt;br /&gt;&lt;br /&gt; for(i=0;i&lt;4;++i)&lt;br /&gt;  atexit(arr[i]);&lt;br /&gt;&lt;br /&gt; for(i=0;i&lt;10;++i)&lt;br /&gt;  if(i==5){&lt;br /&gt;   printf("%d",i);&lt;br /&gt;   _Exit(0);&lt;br /&gt;   }&lt;br /&gt; printf("End of program");&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;При выполнении данного кода произойдет следующее. При i==5 программа завершит свое выполнение путем вызова функции _Exit, при этом ни один из обработчиков вызван не будет. Результат выполнения приведен ниже:&lt;br /&gt;&lt;br /&gt;[Session started at 2008-11-07 11:10:00 +0300.]&lt;br /&gt;&lt;br /&gt;The Debugger has exited with status 0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-3087579749058399910?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/3087579749058399910/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=3087579749058399910' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/3087579749058399910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/3087579749058399910'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/exit_07.html' title='Использование функции _Exit'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-5269755685352240431</id><published>2008-11-06T23:57:00.000-08:00</published><updated>2008-11-10T05:00:05.520-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Использование функции exit</title><content type='html'>Рассмотрим варианты выхода из программы.&lt;br /&gt;&lt;br /&gt;Первый вариант - это выход при помощи вызова функции exit, которая выглядит следующим образом:&lt;br /&gt;void  exit(int)&lt;br /&gt;&lt;br /&gt;В качестве параметра в функцию нужно передать код возврата, с которым закончит свою работу программа.&lt;br /&gt;При вызове функции программа завершает свою работу. При этом вызываются все функции, зарегистрированные с помощью функции atexit.&lt;br /&gt;&lt;br /&gt;Пример использования:&lt;br /&gt;&lt;br /&gt;int k=0;&lt;br /&gt;&lt;br /&gt;void exit1(){&lt;br /&gt; printf("At function exit1 %d\n",k++);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void exit2(){&lt;br /&gt; printf("At function exit2 %d\n",k++);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void exit3(){&lt;br /&gt; printf("At function exit3 %d\n",k++);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void exit4(){&lt;br /&gt; printf("At function exit4 %d\n", k++);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Это функции - обработчики завершения программы.&lt;br /&gt;&lt;br /&gt;typedef void (* Func_t)(void);&lt;br /&gt;&lt;br /&gt;int main (int argc, const char * argv[]) {&lt;br /&gt;&lt;br /&gt; Func_t arr[4]={exit1, exit2, exit3, exit4};&lt;br /&gt;&lt;br /&gt; int i=0;&lt;br /&gt;&lt;br /&gt; for(i=0;i&lt;4;++i)&lt;br /&gt;  atexit(arr[i]);&lt;br /&gt;&lt;br /&gt; for(i=0;i&lt;10;++i)&lt;br /&gt;  if(i==5){&lt;br /&gt;   printf("%d",i);&lt;br /&gt;   exit(0);&lt;br /&gt;   }&lt;br /&gt; printf("End of program");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;При запуске данного кода получаем следующий результат:&lt;br /&gt;&lt;br /&gt;5                  //  Печатается счетчик цикла i&lt;br /&gt;At function exit4 0 // Результат выводится последним обработчиком&lt;br /&gt;At function exit3 1 // Результат выводится предпоследним обработчиком&lt;br /&gt;At function exit2 2 // и т.д.&lt;br /&gt;At function exit1 3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-5269755685352240431?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/5269755685352240431/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=5269755685352240431' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/5269755685352240431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/5269755685352240431'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/exit.html' title='Использование функции exit'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-1109640603355105111</id><published>2008-11-04T05:59:00.000-08:00</published><updated>2008-11-10T04:59:52.911-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Что можно почитать?</title><content type='html'>Часто возникает вопрос: А где найти информацию по языку, стандарту и т.д. В принципе, таких мест много в сети. Но если удобно работать с печатными изданиями, которые всегда под рукой, "приятно шелестят страницами", не требуют наличия соединения с сетью, да и вообще ноутбука, то я могу порекомендовать следующее:&lt;br /&gt;&lt;a href=http://www.ozon.ru/context/detail/id/1529399/?partner=albova&gt;&lt;img src="http://www.ozon.ru/multimedia/books_covers/1000088422.jpg" alt="Язык программирования C" /&gt;&lt;br /&gt;Сэмюел П. Харбисон, Гай Л. Стил&lt;br /&gt;Язык программирования C&lt;/a&gt;&lt;br /&gt;Книга, а мой взгляд, написана очень хорошо. Полностью раскрыты возможности использования языка, приведены примеры.&lt;br /&gt;Так что, эта книга заслуживает Вашего прочтения.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-1109640603355105111?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/1109640603355105111/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=1109640603355105111' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/1109640603355105111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/1109640603355105111'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/blog-post_04.html' title='Что можно почитать?'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-2216662623918032084</id><published>2008-11-03T12:31:00.001-08:00</published><updated>2008-11-10T04:59:39.610-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Дополнение по atexit</title><content type='html'>По поводу 80 обработчиков:&lt;div&gt;хочу уточнить, что в первом тестовом примере было вызвано 200 обработчиков, а во втором вообще 1600.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-2216662623918032084?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/2216662623918032084/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=2216662623918032084' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/2216662623918032084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/2216662623918032084'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/atexit_8009.html' title='Дополнение по atexit'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-7677355600528494311</id><published>2008-11-03T12:15:00.000-08:00</published><updated>2008-11-10T04:59:24.591-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Дополнение по atexit</title><content type='html'>Я протестировал возможность добавления 32 обработчиков выхода через atexit. В результате тестов я обнаружил, что &lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: 'Trebuchet MS'; font-size: 13px; "&gt;i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465) &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;позволяет мне добавить до 80 обработчиков. Тестовый код приведен ниже:&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: 'Trebuchet MS'; font-size: 13px; "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; k=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;void&lt;/span&gt; exit1(){&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110); "&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;(&lt;/span&gt;"At function exit1 %d\n"&lt;span style="color: rgb(0, 0, 0); "&gt;,k++);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; main (&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; argc, &lt;span style="color: rgb(170, 13, 145); "&gt;const&lt;/span&gt; &lt;span style="color: rgb(170, 13, 145); "&gt;char&lt;/span&gt; * argv[]) {&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; i=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;for&lt;/span&gt;(i=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;i&lt;&lt;span style="color: rgb(28, 0, 207); "&gt;400&lt;/span&gt;;++i)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;  &lt;/span&gt;&lt;span style="color: rgb(46, 13, 110); "&gt;atexit&lt;/span&gt;(exit1);&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;for&lt;/span&gt;(i=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;i&lt;&lt;span style="color: rgb(28, 0, 207); "&gt;100&lt;/span&gt;;++i)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;  &lt;/span&gt;&lt;/span&gt;printf&lt;span style="color: rgb(0, 0, 0); "&gt;(&lt;/span&gt;&lt;span style="color: rgb(196, 26, 22); "&gt;"."&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;    &lt;span style="color: rgb(170, 13, 145); "&gt;return&lt;/span&gt; &lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;На выходе получаем:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1 1&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1 2&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1 3&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 16px; "&gt;&lt;span class="Apple-style-span" style="font-family: Courier; font-size: 12px; font-weight: bold; "&gt;At function exit1 4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 16px; "&gt;...&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS'; font-size: 13px; "&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1 196&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1 197&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1 198&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1 199&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;Если мы используем следующий код:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS'; font-size: 13px; font-weight: normal; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; k=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;void&lt;/span&gt; exit1(){&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110); "&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;(&lt;/span&gt;"At function exit1 %d\n"&lt;span style="color: rgb(0, 0, 0); "&gt;,k++);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;void&lt;/span&gt; exit2(){&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110); "&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;(&lt;/span&gt;"At function exit2 %d\n"&lt;span style="color: rgb(0, 0, 0); "&gt;,&lt;/span&gt;&lt;span style="color: rgb(63, 110, 116); "&gt;k&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;++);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;void&lt;/span&gt; exit3(){&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110); "&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;(&lt;/span&gt;"At function exit3 %d\n"&lt;span style="color: rgb(0, 0, 0); "&gt;,&lt;/span&gt;&lt;span style="color: rgb(63, 110, 116); "&gt;k&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;++);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;void&lt;/span&gt; exit4(){&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(46, 13, 110); "&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;(&lt;/span&gt;"At function exit4 %d\n"&lt;span style="color: rgb(0, 0, 0); "&gt;, &lt;/span&gt;&lt;span style="color: rgb(63, 110, 116); "&gt;k&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;++);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;typedef&lt;/span&gt; &lt;span style="color: rgb(170, 13, 145); "&gt;void&lt;/span&gt; (* Func_t)(&lt;span style="color: rgb(170, 13, 145); "&gt;void&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; main (&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; argc, &lt;span style="color: rgb(170, 13, 145); "&gt;const&lt;/span&gt; &lt;span style="color: rgb(170, 13, 145); "&gt;char&lt;/span&gt; * argv[]) {&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;    &lt;/span&gt;// insert code here...&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;Func_t arr[&lt;span style="color: rgb(28, 0, 207); "&gt;4&lt;/span&gt;]={exit1, exit2, exit3, exit4};&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;    &lt;/span&gt;&lt;span style="color: rgb(46, 13, 110); "&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;(&lt;/span&gt;"Hello, World!\n"&lt;span style="color: rgb(0, 0, 0); "&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; i=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;int&lt;/span&gt; j=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;for&lt;/span&gt;(j=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;j&lt;&lt;span style="color: rgb(28, 0, 207); "&gt;400&lt;/span&gt;;++j)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;for&lt;/span&gt;(i=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;i&lt;&lt;span style="color: rgb(28, 0, 207); "&gt;4&lt;/span&gt;;++i)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;  &lt;/span&gt;&lt;span style="color: rgb(46, 13, 110); "&gt;atexit&lt;/span&gt;(arr[i]);&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;span style="color: rgb(170, 13, 145); "&gt;for&lt;/span&gt;(i=&lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;i&lt;&lt;span style="color: rgb(28, 0, 207); "&gt;100&lt;/span&gt;;++i)&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;  &lt;/span&gt;&lt;/span&gt;printf&lt;span style="color: rgb(0, 0, 0); "&gt;(&lt;/span&gt;&lt;span style="color: rgb(196, 26, 22); "&gt;"."&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;    &lt;span style="color: rgb(170, 13, 145); "&gt;return&lt;/span&gt; &lt;span style="color: rgb(28, 0, 207); "&gt;0&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;}&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;В этом случае результат еще интереснее:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 16px;"&gt;...&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS'; font-size: 13px; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit4 1596&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit3 1597&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit2 1598&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1 1599&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;Это говорит о том, что количество функций-обработчиков - не ограничено. Все зависит от конкретной реализации. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 16px;"&gt;Однако, согласно стандарту, надо помнить, что гарантировано вызывается только 32 обработчика.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-7677355600528494311?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/7677355600528494311/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=7677355600528494311' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7677355600528494311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/7677355600528494311'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/atexit_03.html' title='Дополнение по atexit'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-529216026152900813</id><published>2008-11-03T11:33:00.000-08:00</published><updated>2008-11-10T04:58:24.962-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Использование atexit</title><content type='html'>Использование функции atexit... Функция позволяет назначать обработчики выхода из программы. Зарегистрированные с помощью нее обработчики будут вызваны при нормальном завершении программы, а также в некоторых случаях прерывания ее работы. Это позволяет провести некоторые операции, например, сохранение данных программы, при ее завершении.&lt;div&gt;Функция atexit определена в стандартом заголовочном файле stdlib.h. Функция выглядит следующим образом:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span style="color:#aa0d91;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt; atexit(&lt;/span&gt;&lt;span style="color:#aa0d91;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt; (*)(&lt;/span&gt;&lt;span style="color:#aa0d91;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;)).&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Таким образом, функция, которая может использоваться в качестве обработчика выхода из программы, не должна возвращать результатов и, кроме того, она не имеет параметров.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Пример использования:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 16px;"&gt;#include&lt;stdio.h&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 16px;"&gt;#include &lt;stdlib.h&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span"   style=" ;font-family:georgia;font-size:16px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span"   style=" ;font-family:georgia;font-size:16px;"&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; exit1(){&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #c41a16"&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"At function exit1\n"&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; min-height: 14.0px"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; exit2(){&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #c41a16"&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"At function exit2\n"&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; min-height: 14.0px"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; exit3(){&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #c41a16"&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"At function exit3\n"&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; min-height: 14.0px"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; exit4(){&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #c41a16"&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"At function exit4\n"&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; min-height: 14.0px"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; main (&lt;/span&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; argc, &lt;/span&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;const&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;char&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; * argv[]) {&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #007400"&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;// insert code here...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #c41a16"&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"Hello, World!\n"&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;atexit&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(exit1);&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;atexit&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(exit2);&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;atexit&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(exit3);&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2e0d6e"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;atexit&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(exit4);&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; i=&lt;/span&gt;&lt;span style="color: #1c00cf"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(i=&lt;/span&gt;&lt;span style="color: #1c00cf"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;;i&lt;&lt;/span&gt;&lt;span style="color: #1c00cf"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;100&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;;++i)&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #2e0d6e"&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;printf&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #c41a16"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"."&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    &lt;/span&gt;&lt;span style="color: #aa0d91"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;span style="color: #1c00cf"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;В результате получается следующее:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: 'Trebuchet MS'; font-size: 13px; "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;[Session started at 2008-11-03 22:45:28 +0300.]&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;Hello, World!&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS'; font-size: 13px; "&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;....................................................................................................At function exit4&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit3&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit2&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;b&gt;At function exit1&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Courier; color: rgb(51, 51, 51); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;Можно зарегистрировать до 32 обработчиков. При этом они будут вызываться в обратном порядке, т.е. последний зарегистрированный обработчик будет вызываться первым.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-529216026152900813?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/529216026152900813/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=529216026152900813' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/529216026152900813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/529216026152900813'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/atexit.html' title='Использование atexit'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5374517018413942275.post-2171739739936769463</id><published>2008-11-03T11:31:00.000-08:00</published><updated>2008-11-03T11:32:32.546-08:00</updated><title type='text'>О блоге...</title><content type='html'>Данный блог посвящен программированию на языке С. В нем я буду приводить примеры использования стандартного С (с99), а также рассматривать некоторые интересные моменты...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5374517018413942275-2171739739936769463?l=clangprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clangprogramming.blogspot.com/feeds/2171739739936769463/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5374517018413942275&amp;postID=2171739739936769463' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/2171739739936769463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5374517018413942275/posts/default/2171739739936769463'/><link rel='alternate' type='text/html' href='http://clangprogramming.blogspot.com/2008/11/blog-post.html' title='О блоге...'/><author><name>albova</name><uri>http://www.blogger.com/profile/15042101119226956105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
