Аналог сишного типа данных

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Re: Аналог сишного типа данных

Сообщение fedan » 28.03.2019 12:09:46

Vadim писал(а):int128_t


https://www.freepascal.org/docs-html/rtl/sysutils/int128rec.html

Правда единственное применение это InterlockedCompareExchange128
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Аналог сишного типа данных

Сообщение Vadim » 28.03.2019 13:08:37

fedan
Большое спасибо!
Vadim
долгожитель
 
Сообщения: 3842
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение Vadim » 04.04.2019 09:57:58

Что-то мне никак не приходит в голову, как можно в Паскале объявить такую сишную константу:
Код: Выделить всё
#define UNWEIGHTED           ((int *) 2)

Про типизированные константы я знаю, но их значения можно менять.
Как правильно сделать константу?
Vadim
долгожитель
 
Сообщения: 3842
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение fedan » 04.04.2019 11:21:31

Код: Выделить всё
const
   UNWEIGHTED = PInteger(2);
Последний раз редактировалось fedan 04.04.2019 13:01:21, всего редактировалось 1 раз.
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Аналог сишного типа данных

Сообщение Vadim » 04.04.2019 12:10:22

fedan
А прочитать значение потом можно будет?
Vadim
долгожитель
 
Сообщения: 3842
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение fedan » 04.04.2019 12:56:31

Нет. Скорее получишь Access violation. Это адрес 0x00000002 (i386)
И как бы это константа - флаг для чего-то, указывающего что оно UNWEIGHTED :)

Изображение
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Аналог сишного типа данных

Сообщение Vadim » 04.04.2019 13:33:39

fedan
Так мне с этой константой надо сравнивать ответы функций. Если значение константы получить не удастся, то как же её использовать?
Vadim
долгожитель
 
Сообщения: 3842
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение fedan » 04.04.2019 13:45:02

А функции возвращают указатель или целое число?
Код: Выделить всё
if myFunc1 = UNWEIGHTED then
  ...

if Pinteger(myFunc2) = UNWEIGHTED then
  ...


Что вообще за проект, он в паблике есть?
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Аналог сишного типа данных

Сообщение wavebvg » 04.04.2019 14:20:48

wavebvg
постоялец
 
Сообщения: 292
Зарегистрирован: 28.02.2008 04:57:35

Re: Аналог сишного типа данных

Сообщение Vadim » 04.04.2019 14:49:55

fedan
Тут я неполную информацию дал. Функция возвращает чёрте-то... :-D Целочисленный массив. Который, естественно, указатель, но вот сравнивается он именно с такой константой.

fedan писал(а):Что вообще за проект, он в паблике есть?

Проект - застрелиться и не встать ( :-D ) - более-менее автоматизированный перевод сишных заголовков в паскалевские. Делается на примере OpenMPI.
Проекта-переводчика в паблике пока нет - там пока ещё чёрт ногу сломит, а OpenMPI (в процессе работы) здесь:
https://github.com/VadimAnIsaev/FreePascal-MPI
Vadim
долгожитель
 
Сообщения: 3842
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение fedan » 04.04.2019 14:59:41

fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Аналог сишного типа данных

Сообщение Vadim » 04.04.2019 15:03:54

fedan
Ага.
Vadim
долгожитель
 
Сообщения: 3842
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение fedan » 04.04.2019 15:28:35

Ну, вот например
можно преобразовать к такому
в C/C++ const int sourceweights[] = const int* sourceweights
Код: Выделить всё
{$POINTERMATH ON}
...
// sourceweights: PInteger вместо массива
// } else if (MPI_UNWEIGHTED != sourceweights && sourceweights[i] < 0) {
end else if (MPI_UNWEIGHTED <> sourceweights) and (sourceweights[i] < 0) then begin

Тут проверяется что массив sourceweights не является невзвешенным и содержит веса больше 0.
Последний раз редактировалось fedan 04.04.2019 15:37:30, всего редактировалось 1 раз.
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Аналог сишного типа данных

Сообщение Vadim » 04.04.2019 15:37:14

fedan
Остаётся только вопрос, а будет ли такое работать в паскале:
Код: Выделить всё
Const
  MPI_UNWEIGHTED = PInteger(2);

...

Var
  arr: array of Integer;

...

  If arr = MPI_UNWEIGHTED Then
    ...

?
Я, к сожалению, не могу найти реальных примеров с применением подобных констант, чтобы можно было повторить на Паскале и проверить.
Vadim
долгожитель
 
Сообщения: 3842
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аналог сишного типа данных

Сообщение Дож » 04.04.2019 15:42:29

будет ли такое работать в паскале

Зависит от того что называть словом "работать". Если подразумевается какой-то смысл у кода, то нет -- т.к. arr является Managed типом, то в него нельзя записать произвольную пользовательскую константу, а, значит, и сравнивать с произвольной пользовательской константой нет смысла.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 814
Зарегистрирован: 12.10.2008 16:14:47

Пред.След.

Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru