這是較舊的程序員的問題。Pascal的任何方言是否允許可變數量的參數?
幾年前,我遇到了一種帕斯卡方言,它通過某種擴展方式允許可變數量的參數。
有誰知道帕斯卡爾當前的方言,它允許可變數量的參數?
鑑於Pascal不像以前那麼受歡迎,如果答案是否定的,我不會感到驚訝。
順便說一句,這是更正確的,是不是,說了可變數量的參數,而不是參數?
這是較舊的程序員的問題。Pascal的任何方言是否允許可變數量的參數?
幾年前,我遇到了一種帕斯卡方言,它通過某種擴展方式允許可變數量的參數。
有誰知道帕斯卡爾當前的方言,它允許可變數量的參數?
鑑於Pascal不像以前那麼受歡迎,如果答案是否定的,我不會感到驚訝。
順便說一句,這是更正確的,是不是,說了可變數量的參數,而不是參數?
不可以。答案是基於我用過的帕斯卡方言;其他人可能會不同。
原因是Pascal按順序將參數壓入堆棧幀,因此所有參數都是通過堆棧指針的固定偏移量訪問的。 C通過比較以相反的順序推入參數,所以定義的參數處於固定偏移量,並且可以通過指針算術訪問「額外」參數。我會嘗試一些ASCII藝術:
Pascal C
---------------------
| extra arg |
--------------------- ---------------------
| 1st param | | 3rd param |
--------------------- ---------------------
| 2nd param | | 2nd param |
--------------------- ---------------------
SP -> | 3rd param | | 1st param |
--------------------- ---------------------
至於參數與參數:我學過的函數(方法)定義了它的參數,調用者傳遞的參數。我相信這個定義來自Fortran手冊,所以應該給你一個我多大的想法:-)
您可以使用可選的參數用delphi來獲得同樣的效果:
procedure Proc(const A: Integer; const B: Integer = 15);
Proc(10); // B = 15
Proc(20,30);
或者重載方法:
procedure Proc(const A: Integer); overload;
procedure Proc(const A,B: Integer); overload;
Proc(10); // Variant 1
Proc(20,30); // Variant 2
或者你也可以使用參數變量數組:
procedure Message(const AMessage: string; const AArgs: array of const);
Message('Hello %s', [Name]);
Message('%s %s', [Greeting, Name]);
GNU-Pascal(gcc based)afaik映射1:1到C的支持。使用函數something(arg:pchar; ...)like syntax
Delphi/Free Pascal具有「array of const」支持,這是一個類型安全的版本,以及用於C接口(D6或D7 +)的可變參數指令
你可能正在考慮一個可用於Turbo Pascal的庫,他們有這樣的黑客攻擊。我的語法對於對象來說有點生鏽,並且從它下降。
type
TValue = object;
TInteger = object(TValue)
Value : Integer;
end
TString = object(TValue)
Value : String;
end
TParam = record
Value : TValue;
Param : TParam;
end;
TValue = object;
{ Definition of Function }
function Test (Arg : TParam);
{ Usage }
var
I : TInteger;
S : TString;
Test (TParam (I, TParam (S, nil));
您可以根據需要鏈接儘可能多的參數。最後一個必須以零結尾。
是的,說更多的參數變量是正確的,函數只能有一個參數,它是一個變量列表的參數,通常作爲最後一個參數 – 2009-09-22 12:33:23
我喜歡這種思考方式:'一個參數是一個可變的參數列表'+1(但你不是真的*夠老*; -D) – pavium 2009-09-22 13:06:15