I'm a very experienced C programmer, but recently I came across some code on a mainframe that has a local variable. This is in a simple C function that declares this variable, and then strcpy / strcats two strings into it, and then tries an fopen.
char foo(|10|);
This code is very old. Possibly even K&R C old. I'm wondering if this is some obscure compiler extension or an adaptation to a keyboard that doesn't have [] or something like that.
Anyone know if this declaration is 'special'?
This is a standard Z/OS mainframe. I'm not sure what compiler is used.
It seems to be an early or non-standard form of digraph. The code was probably written using EBCDIC instead of ASCII, and EBCDIC doesn't have
[ ]characters (at least not in all code pages).I found the manual for SAS/C, a C compiler apparently meant for System/370. On page 2-10 (page 42 of the pdf) you can see they list
(| |)as "alternate forms" for[ ].(Though apparently
|is not in all the code pages either; but maybe it was in a code page that was more commonly used? I don't know.)C99 also included digraphs (and trigraphs) to solve the same problem, but they used
<: :>as the digraphs, and??( ??)for the trigraphs.