Как передать константу nil в нетипизированный параметр? - PullRequest
7 голосов
/ 29 августа 2011

возможно ли передать ноль в качестве необъявленной константы нетипизированному параметру некоторой функции? У меня есть такие функции, и я хотел бы передать некоторую константу параметру Data для удовлетворения компилятора. Внутренне я выбираю параметр Size. Я знаю, что могу использовать указатель вместо нетипизированного параметра, но в моем случае это намного удобнее.

Теперь я получаю E2250 There is no overloaded version of 'RS232_SendCommand' that can be called with these arguments

function RS232_SendCommand(const Command: Integer): Boolean; overload;
begin
  // is it possible to pass here an undeclared constant like nil in this example?
  Result := RS232_SendCommand(Command, nil, 0);
end;

function RS232_SendCommand(const Command: Integer; const Data; const Size: Integer): Boolean; overload;
begin
  ...
end;

Это работает, но я был бы рад, если бы я мог оставить объявление переменной.

function RS232_SendCommand(const Command: Integer): Boolean; overload;
var
  Nothing: Pointer;
begin
  Result := RS232_SendCommand(Command, Nothing, 0);
end;

Решение - использовать что-то подобное.

function RS232_SendCommand(const Command: Integer): Boolean; overload;
begin
  // as the best way looks for me from the accepted answer to use this
  Result := RS232_SendCommand(Command, nil^, 0);

  // or it also possible to pass an empty string constant to the untyped parameter
  // without declaring any variable
  Result := RS232_SendCommand(Command, '', 0);
end;

Я делаю это, потому что некоторые из моих команд имеют данные, отправленные после передачи команды.

Спасибо за помощь

Ответы [ 2 ]

12 голосов
/ 29 августа 2011

Легко:

RS232_SendCommand(Command, nil^, 0);

Вам просто нужно убедиться, что у вас нет доступа к параметру Data изнутри RS232_SendCommand, но, вероятно, для этого и нужен параметр размера 0.

На мой взгляд, это лучшее решение, поскольку в нем очень четко сказано, что вы передаете что-то, к чему нет доступа.

2 голосов
/ 29 августа 2011

Нет, вы не можете. не то, что я знал о

Нетипизированные параметры

Выможет опускать спецификации типа при объявлении параметров var , const и out .(Значения параметров должны быть набраны.) Например:

процедура TakeAnything (const C);

объявляет процедуру под названием TakeAnything, которая принимаетпараметр любого типа.Когда вы вызываете такую ​​подпрограмму, вы не можете передать ей числовую или нетипизированную числовую константу.

From: Параметры (Delphi)

Так что, возможно, добавьте еще одну перегруженную версию без постоянного аргумента, который вы можете вызвать, когда Size = 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...