Компиляция динамических бибилиотек (.so)
От: Gideon  
Дата: 03.12.02 08:02
Оценка:
Перенесено в форум "Средства разработки" -- ПК.

Тут пришлось юзать ф-ци из одной такой бибилотеки...
Посмотрел как другие делают и увидел что-то вроде:

#include <stdio.h>
__BEGIN_DECL
(тип) (имя ф-ции) __P(());
(тип) (имя ф-ции) __P(());
и т.д.
__END_DECL

.....
void main()
....


Так вот хотелось бы узнать поподробнее,
что такое "__P(())", и что тут делает "__BEGIN_DECL" и "__END_DECL"
Re: Компиляция динамических бибилиотек (.so)
От: Аноним  
Дата: 03.12.02 08:06
Оценка:
ну так ищи эти макросы, да и все.
Re: От модератора форума C++
От: Павел Кузнецов  
Дата: 03.12.02 09:34
Оценка:
Здравствуйте, Gideon, Вы писали:

<...>

Пожалуйста, не забывай пользоваться тегами [c] ... [/c] для раскраски кода.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: Компиляция динамических бибилиотек (.so)
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 03.12.02 09:37
Оценка:
Здравствуйте, 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


Используется для опережающих объявлений. Связано их использование, видимо, с тем, что в С для не требуется (когда-то не требовалось, м/б) знание всех параметров функции. Достаточно имени и возвращаемого значения. Но, опять таки, подробностей не знаю.
Алексей Кирдин
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.