2016-04-19 6 views
5

チェック優れた迂回ライブラリからこのdemo source'cdecl = nil'(関数宣言の後に置かれる)とはどういう意味ですか?

implementation 

{$R *.dfm} 

var 
    TrampolineGetMemory: function(Size: NativeInt): Pointer; 
cdecl = nil; 

cdecl = nil;の文を見てください。この文脈ではどういう意味ですか?

注 - 私はすでにcdeclが呼び出し規約を表していることを知っています。

+3

のように書き換えるかどうかを確認するために簡単です:整数= 42;'私は特定の初期化が、一部のプログラムでは、実際には約十万年あなたを得ることができると思い –

+2

@DavidHeffernan増加のperf。 –

答えて

7

これは、変数を初期化するもう一つの方法です。たとえば、次のように

program Project1; 

{$APPTYPE CONSOLE} 

var 
    i : integer = 5; 
begin 
    WriteLn(i); 
    ReadLn; 
end. 

タイプが定義されている場合、それは多分

var 
    TrampolineGetMemory: function(Size: NativeInt): Pointer; cdecl = nil; 

またはより良いように、1行に書かれていた場合、それが明確になることがあります。

type 
    TTrampolineGetMemory = function(Size: NativeInt): Pointer; cdecl; 

//... 
var 
    TrampolineGetMemory: TTrampolineGetMemory = nil; 
+0

グローバル変数は '0/nil/false'に初期化されているので完全に冗長であることに注意してください - [delphi変数はデフォルトで値で初期化されていますか?](http://stackoverflow.com/questions/132725/are-delphi -variables-initial-with-a-value-by-default)。これは、イベントハンドラをnilに初期化するか、またはブール値フィールドをコンストラクタでfalseに初期化するのと同じです。全く無意味です。 –

+0

@GerryColl確かにそうです。時にはコーディング標準がこのようなことを指示することもありますが(私は思いますか?)わかりやすくするために明示することもできますし、おそらく地元の人々から持ち帰った反射だけかもしれません。それは必要ではありませんが、私はそれを間違って呼ぶ限り、私は確信していません。 –

+0

コンストラクタで0に初期化されていることは、私には気になるコードです。つまり、元のコーダがDelphiを理解できなかったか、デフォルトが何であるかを調べることができなかったことを意味します。 –

7

TrampolineGetMemoryが手続きであります変数nilに初期化されます。

それは `VAR私と同じ

type 
    TTrampolineGetMemory = function(Size: NativeInt): Pointer; cdecl; 
var 
    TrampolineGetMemory: TTrampolineGetMemory = nil; 
関連する問題