在函数调用中参数之前的@在Pascal中是什么意思

时间:2018-05-24 17:01:52

标签: sdl pascal freepascal

我偶然发现了Pascal代码(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 :(得分:3)

在像Pascals这样的Borland中,@是运营商的地址,类似于&在C / C ++中。

本地Free Pascal方言(fpc和objfpc)需要一个@在Delphi中你可以传递函数/方法的地方

添加这是为了消除歧义情况,其中函数/方法返回具有相同签名的过程/方法类型。

模式objfpc中的一个东西会损害兼容性并且不会增加太多(因为它只解决了一个非常人为的角落案例),这就是为什么我可以避免这些模式,并使用{$ mode delphi尽可能多。