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

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

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

Ответить
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

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

Сообщение Иван Шихалев »

Код: Выделить всё

VALUE rb_int2inum _((long));

VALUE до этого определен как:

Код: Выделить всё

typedef unsigned long VALUE;
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

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

Сообщение hinst »

в шапке сишной функции если что можно указывать только типы
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

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


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

Сообщение Иван Шихалев »

А чем такое определение отличается от:

Код: Выделить всё

VALUE rb_int2inum (long);

?

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

Добавлено спустя 1 минуту 49 секунд:
Кстати, unsigned long — не везде 32 бита.
trifon
постоялец
Сообщения: 135
Зарегистрирован: 24.12.2006 11:08:35

Сообщение trifon »

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

Код: Выделить всё

#define _(par)  some_function(par) 

Возможно там

Код: Выделить всё

#define _(par)  sizeof(par)
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Так оно и оказалось. Макрос в каких-то случаях разворачивается просто в скобки, в каких-то в пустое место. Это все прототипы функций...
Ответить