Am 22.06.2018 um 06:35 schrieb Ryan Joseph:
Here’s a macro I like from C. It captures the assert expression and prints it 
back out into the console (it would halt the program also). Can this be done in 
Pascal? In C they return the file name and line number also which is really 
nice.

{$define assert(x):=if not (x) then writeln('assert: x')}

var
        i: integer = 100;
begin
        assert(i = 101); // assert: i=101
end.
That directly can't be done, but Assert() in Pascal is nice (and quite powerful) nevertheless:

=== code begin ===

program ttest;

{$Assertions on}

var
  i: LongInt;
begin
  i := 42;
  Assert(i = 21, 'Bla, Blubb');
end.

=== code end ===

This will print:

=== output begin ===

Bla, Blubb (ttest.pp, line 9).

=== output end ===

If $Assertions is set to Off the complete Assert() line will be absent from the compiled code.

If unit SysUtils is included then a failed assertion results in an EAssertionError though that can be changed by setting AssertErrorProc in unit System. If unit System is not included then the line above will be printed and the program terminated.

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to