(printf) ("hello world\n");
Michael Elizabeth Chastain
mec.gnu@mindspring.com
Tue Dec 9 20:41:00 GMT 2003
I have a language lawyer question.
int main ()
{
(printf) ("hello world\n");
return 0;
}
Is this a conforming C program?
There is no "#include <stdio.h>" so there is no declaration
in scope for printf.
gcc 2.95.3 and gcc 3.3.2 both say:
hello.c: In function `main':
hello.c:3: `printf' undeclared (first use in this function)
hello.c:3: (Each undeclared identifier is reported only once
hello.c:3: for each function it appears in.)
This happens with each of:
-std=iso9899:1990
-std=iso9899:199409
-std=iso9899:1999
But the HP ansi-c and aCC compilers accept it just fine.
This kind of code comes out of a macro expansion with readline 4.3
and gcc 3.3.2 on native hppa2.0w-hp-hpux11.11. It's the end
result of an interaction between multibyte support in hpux11
and a strange-looking workaround in readline.
Of course the question "is this conforming ..." depends on a particular
standard. So I think I am asking three questions, one for each of the
three standards.
If the program is not conforming, then I can work on a patch for
readline. But if the program is conforming, then I can file a PR
against gcc (and I'll still have to patch readline).
(Personally I would be happier if this program is not conforming.)
Michael C
More information about the Gcc
mailing list