чтобы сразу было понятно что к чему.
ПРОГРАММА:
Код
program VarStr;
uses
Dos;
procedure Proc( var Dir : DirStr; var Name : NameStr; var Ext : ExtStr );
begin
end;
procedure Proc2( var B : Byte; var W : Word; var L : LongInt );
begin
end;
procedure Proc3( var I : Integer; var W : Word );
begin
end;
procedure Proc21( B : Byte; W : Word; L : LongInt );
begin
end;
var
SD, SN, SE : String;
SDir : DirStr;
SName : NameStr;
SExt : ExtStr;
B : Byte;
W : Word;
L : LongInt;
I : Integer;
begin
(*Proc(SD,SN,SE); { НЕЛЬЗЯ! Ошибка 26: Type mismatch(несовпадение типов). }*)
Proc(SDir,SName,SExt); { Всё в порядке! }
(*Proc2(B,B{Error 26!},B);*)
(*Proc2(W{Error 26!},W,W);*)
(*Proc2(L{Error 26!},L,L);*)
Proc2(B,W,L); { Всё в порядке! }
(*Proc3(W{Error 26!},W);*)
(*Proc3(W{Error 26!},I);*)
(*Proc3(I,I{Error 26!});*)
Proc3(I,W); { Всё в порядке! }
Proc3(Integer(W),Word(I)); { Всё в порядке! }
Proc21(B,W,L); { Всё в порядке! }
Proc21(L,B,W); { Всё в порядке! }
Proc21(W,L,B) { Всё в порядке! }
end.
И сам ВОПРОС(недеюсь он теоретический(имеет отношение к синтаксису, семантике и т.д. и т.п)):
Почему типы фактических параметров переменных, задаваемых при вызове подпрограммы,
должны СОВПАДАТЬ(быть РАВНЫМИ) соответствующим формальным VAR-параметрам.
Почему здесь ошибка 26(Type mismatch) - НЕСООТВЕТСТВИЕ ТИПОВ превращается в ошибку
НЕСОВПАДЕНИЕ ТИПОВ.
Пожалуйста, если кто-нибудь знает, объясните.