我无意中发现了多个 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 相关函数中,但我找不到任何关于它的信息。
最佳答案
在像 Pascals 一样的 Borland 中,@ 是寻址运算符,类似于 C/C++ 中的 &。
此外,自己的 Free Pascal 方言(fpc 和 objfpc)在 TP/Delphi 中您可以传递函数/方法的地方需要 @
这是为了消除函数/方法返回具有相同签名的过程/方法类型的极端情况的歧义。
它是 objfpc 模式中的一个东西,它会损害兼容性并且不会增加太多(因为它只解决了一个非常人为的极端情况),这就是为什么我尽可能避免这些模式,并使用 {$mode delphi } 尽可能多。
关于sdl - 函数调用中参数前的 @ 在 Pascal 中意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50514631/