Что означает @ перед параметром в вызове функции в Паскале - PullRequest
0 голосов
/ 24 мая 2018

Я наткнулся на несколько примеров кода Паскаля (режим компилятора FPC), где символ «@» иногда используется перед именем параметра в вызове функции / процедуры, и я не смог найти, что это значит.Иногда я даже видел, как он используется с переменной, которая еще не была объявлена.Например:

procedure displayImage ( var window , image : PSDL_SURFACE );
    var destination_rect : TSDL_RECT ;
BEGIN
    {Setting of the x,y,w and h parameters of the destination_rect variable}
    SDL_BlitSurface (image , NIL , window , @destination_rect);
    SDL_Flip (window)
END;

SDL_PollEvent (@event); //The event variable hasn't been declared or initialized prior to this, yet this seems to work
if event.type_ = SDL_MOUSEBUTTONDOWN then
    {Do stuff}
if event.type_ = SDL_QUITEV then
    {Quit program}

Я предполагаю, что это может быть причудой SDL, поскольку каждый раз, когда я сталкивался с этим, это было в функции, связанной с SDL, но я не мог найтичто-нибудь об этом.

1 Ответ

0 голосов
/ 24 мая 2018

В Borland, как Pascals, @ - это оператор адреса, аналогичный & в C / C ++.

Локальные диалекты Free Pascal (fpc и objfpc) требуют @ в тех местах, где в Delphi выможет просто передать функцию / метод

Это было добавлено для устранения неоднозначности углового случая, когда функция / метод возвращает тип процедуры / метода с той же сигнатурой.

Это одна из вещей врежим objfpc, который наносит вред совместимости и не добавляет много (поскольку он решает только весьма надуманный угловой случай), поэтому я избегаю этих режимов, если могу, и использую {$ mode delphi} в максимально возможной степени.

...