Перенесено в форум "Средства разработки" -- ПК.
Тут пришлось юзать ф-ци из одной такой бибилотеки...
Посмотрел как другие делают и увидел что-то вроде:
#include <stdio.h>
__BEGIN_DECL
(тип) (имя ф-ции) __P(());
(тип) (имя ф-ции) __P(());
и т.д.
__END_DECL
.....
void main()
....
Так вот хотелось бы узнать поподробнее,
что такое "__P(())", и что тут делает "__BEGIN_DECL" и "__END_DECL"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Gideon, Вы писали:
G>что такое "__P(())", и что тут делает "__BEGIN_DECL" и "__END_DECL"
Если код сишный, то это не всегда то же самое, что C++-сный. Макросы __BEGIN_DECL и __END_DECL пердназначены, насколько я понимаю, для указания, что имена должны декорироваться в стиле С даже когда код компилируется как код на C++. Для этого случая
#if defined(__cplusplus)
#define __BEGIN_DECLS extern "C" {
#define __END_DECLS };
#else
#define __BEGIN_DECLS
#define __END_DECLS
#endif
Что же касается __P, то этот макрос указывает, надо ли приписать аргументы после имени функции, или нет. (Ну, подробностей не знаю).
#if defined(__STDC__) || defined(__cplusplus)
#define __P(protos) protos /* full-blown ANSI C */
#else /* !(__STDC__ || __cplusplus) */
#define __P(protos) () /* traditional C preprocessor */
#endif
Используется для опережающих объявлений. Связано их использование, видимо, с тем, что в С для не требуется (когда-то не требовалось, м/б) знание всех параметров функции. Достаточно имени и возвращаемого значения. Но, опять таки, подробностей не знаю.