Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2015-09

dereferenced pointer as open array argument

2 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Seth Grover

Imagine I have this function:

procedure ArrayTest(const data : array of char);
begin
  ...
end;

and in another routine I have a pchar variable. If I slice the array byte doing this:

ArrayTest(myPChar[0..99]);

then inside ArrayTest it will appear that data is 100 characters, which is exactly what I'd expect.

However, it surprised me that this syntax was accepted (with a dereferenced pchar):

ArrayTest(myPChar^);

as well as this syntax (with a simple char):

ArrayTest(myChar);

In both of those cases, ArrayTest thinks it's got an array of length 1.

My question is (and I know this is a long shot): is there some sort of compiler directive or directive I can include in my source code to disallow the syntax of my second and third examples, ie., to disallow passing a single element as an open array?

Thanks,

-SG

Reply by email

Jonas Maebe
to Seth Grover

Seth Grover wrote on Fri, 18 Sep 2015:

procedure ArrayTest(const data : array of char);

...

Show quoted text 15 lines
However, it surprised me that this syntax was accepted (with a dereferenced pchar): ArrayTest(myPChar^); as well as this syntax (with a simple char): ArrayTest(myChar); In both of those cases, ArrayTest thinks it's got an array of length 1. My question is (and I know this is a long shot): is there some sort of compiler directive or directive I can include in my source code to disallow the syntax of my second and third examples, ie., to disallow passing a single element as an open array?

No, there is no such directive. This behaviour has been there from the start when open arrays were initially added to Turbo Pascal.

Jonas

Reply by email