URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4915
[ Назад ]

Исходное сообщение
"Что за __THROW в glibc?"

Отправлено vizbash , 07-Дек-05 14:14 
Решил покопаться в исходниках glibc и натолкнулся
на подобные объявления:

extern int atoi (__const char *__nptr) __THROW __attribute_pure__;

Что есть __THROW?
И что такое __attribute_pure__?

И вообще. Разве можно, с точки зрения синтаксиса, что-то писать
после закрывающей скобки в объявлении функции???


Содержание

Сообщения в этом обсуждении
"Что за __THROW в glibc?"
Отправлено chip , 07-Дек-05 17:26 
>Решил покопаться в исходниках glibc и натолкнулся
>на подобные объявления:
>
>extern int atoi (__const char *__nptr) __THROW __attribute_pure__;
>
>Что есть __THROW?
>И что такое __attribute_pure__?

Это расширения GNU GCC. см. info gcc . Касательно __attribute__ пункт 5.24

>И вообще. Разве можно, с точки зрения синтаксиса, что-то писать
>после закрывающей скобки в объявлении функции???

С точки зрения ANSI-C99 нельзя. С точки зрения компилятора всё возможно :)

Пример, конструктора/деструктора на Cи :)

#include <stdio.h>
void init() __attribute__ ((constructor));
void finit() __attribute__ ((destructor));

void init() { fprintf(stderr, "init()\n"); }
void finit() { fprintf(stderr, "finit()\n"); }
int main(int argc, char *argv[]) { fprintf(stderr, "main()\n"); return 0; }


"Что за __THROW в glibc?"
Отправлено vizbash , 08-Дек-05 12:51 
>>Решил покопаться в исходниках glibc и натолкнулся
>>на подобные объявления:
>>
>>extern int atoi (__const char *__nptr) __THROW __attribute_pure__;
>>
>>Что есть __THROW?
>>И что такое __attribute_pure__?
>
>Это расширения GNU GCC. см. info gcc . Касательно __attribute__ пункт 5.24
>
>
>>И вообще. Разве можно, с точки зрения синтаксиса, что-то писать
>>после закрывающей скобки в объявлении функции???
>
>С точки зрения ANSI-C99 нельзя. С точки зрения компилятора всё возможно :)
>
>
>Пример, конструктора/деструктора на Cи :)
>
>#include <stdio.h>
>void init() __attribute__ ((constructor));
>void finit() __attribute__ ((destructor));
>
>void init() { fprintf(stderr, "init()\n"); }
>void finit() { fprintf(stderr, "finit()\n"); }
>int main(int argc, char *argv[]) { fprintf(stderr, "main()\n"); return 0; }


С этим понятно. Спасибо.