Помогите понять сишную конструкцию

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Помогите понять сишную конструкцию

Сообщение Иван Шихалев » 30.10.2010 20:22:57

Код: Выделить всё
VALUE rb_int2inum _((long));

VALUE до этого определен как:
Код: Выделить всё
typedef unsigned long VALUE;
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Помогите понять сишную конструкцию

Сообщение Maxizar » 30.10.2010 20:52:27

Оператор typedef в С++ позволяющий давать типам данных новые имена
После этого новое имя типа может использоваться в качестве синонима оригинала
Конструкция типа: typedef unsigned long VALUE; Определяют новый тип VALUE, который совподает с типом unsigned long.
unsigned long - безноковое целое в 32 бита (Max = 4294967295, Min=0)
VALUE rb_int2inum _((long)); - поидее должно определять функцию rb_int2inum _ возврощающую типа Value но вот параметры функции записаны не правильно. (указан тока тип, забыли указать имя передаваемой переменной или указателя на нее.)
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Помогите понять сишную конструкцию

Сообщение hinst » 30.10.2010 20:55:56

в шапке сишной функции если что можно указывать только типы
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Помогите понять сишную конструкцию

Сообщение Maxizar » 30.10.2010 21:26:48

hinst писал(а):в шапке сишной функции если что можно указывать только типы


И правда вырезка из книги: В прототипах функций можно указывать только типы формальных параметров без имен переменных, так как прототип содержит только заголовок функции без тела - это только объявление, которое служит компилятору для проверки правильности составления определения функции и вызовов ее на выполнение.
До сегодня я об этом тоже не знал :) Отвечая на вопрос я тоже узнал что-то новое :)
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Помогите понять сишную конструкцию

Сообщение Иван Шихалев » 30.10.2010 21:31:35

А чем такое определение отличается от:
Код: Выделить всё
VALUE rb_int2inum (long);

?

PS. Про typedef я не спрашивал.

Добавлено спустя 1 минуту 49 секунд:
Кстати, unsigned long — не везде 32 бита.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Помогите понять сишную конструкцию

Сообщение trifon » 25.11.2010 16:21:57

Если ещё нужно, то конструкция _((long)) это скорее всего вызов макроса - функции наподобие:
Код: Выделить всё
#define _(par)  some_function(par)

Возможно там
Код: Выделить всё
#define _(par)  sizeof(par)
trifon
постоялец
 
Сообщения: 135
Зарегистрирован: 24.12.2006 12:08:35

Re: Помогите понять сишную конструкцию

Сообщение Иван Шихалев » 25.11.2010 17:21:21

Так оно и оказалось. Макрос в каких-то случаях разворачивается просто в скобки, в каких-то в пустое место. Это все прототипы функций...
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru