Как получить сообщение от компилятора при использовании неверного формата строки - PullRequest
4 голосов
/ 04 октября 2019

Вот фрагмент кода Delphi, который компилятор прекрасно компилирует:

Var S: String;

Begin
 S := Format('%s  %s', ['Hello']);
....

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

Есть ли способ, чтобы эта ошибка была проверена компилятором и отображалась, по крайней мере, как предупреждение, или лучше фатальная ошибка?

1 Ответ

6 голосов
/ 04 октября 2019

Компилятор в том виде, в котором он написан в настоящее время, не делает никаких усилий, чтобы узнать, что заключено в кавычки в первом параметре. Он также не учитывает значения, передаваемые во втором параметре, и не имеет представления, верны ли они. Они не оцениваются до тех пор, пока не будет вызвана функция, где возникает исключение, потому что они неверны. IOW, компилятор не пытается сделать ничего, что позволило бы ему выдавать такое предупреждение или ошибку.

Когда функция вызывается во время выполнения, она проверяет количество аргументов, являются ли они правильным типомили нет, и предоставили ли вы правильные аргументы. Компилятор не пытается сделать это каким-либо образом. Это только гарантирует, что вы предоставите строку для первого параметра и массив const для второго.

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

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