c++ - Cast error message
- Gisle Vanem (33/34) Oct 14 2003 I've a hard time understanding why DMC flags this
- Jan Knepper (8/50) Oct 14 2003 You might be running into one of Walter's inventions (if I remember
- Gisle Vanem (3/6) Oct 14 2003 That fixed it, thanks.
I've a hard time understanding why DMC flags this
as an error:
/* int bar (const char *str1, const char *str2); */
int bar ();
int foo1 (char **list, const char *s)
{
return bar (*list, s);
}
int foo2 (const char *const *list, const char *s)
{
return bar (*list, s); /* line 11 */
}
---------------
dmc -c test.c
return bar (*list, s);
^
test.c(11) : Error: need explicit cast for function parameter 1 to get
from: char const *const
to : char *
--- errorlevel 1
If I use the prototype in the 1st line:
int bar (const char *str1, const char *str2);
instead of the simple "int bar()", it works.
It seems dmc tries to "grow a brain" and create it's own internal
prototype based on the first call to bar(). Thus thinking it should
be "int bar (char *);", while it's not.
Why does it do that? Any reference to a C-standard supporting
this behaviour?
I know I should use full prototypes, but I encountered this while
porting a program that gcc/MSVC/Watcom has no problem with.
--
Gisle V.
/bin/laden: Not found
Oct 14 2003
You might be running into one of Walter's inventions (if I remember
correctly) here called "autoprototyping".
You can turns this off with -p
HTH
Gisle Vanem wrote:
I've a hard time understanding why DMC flags this
as an error:
/* int bar (const char *str1, const char *str2); */
int bar ();
int foo1 (char **list, const char *s)
{
return bar (*list, s);
}
int foo2 (const char *const *list, const char *s)
{
return bar (*list, s); /* line 11 */
}
---------------
dmc -c test.c
return bar (*list, s);
^
test.c(11) : Error: need explicit cast for function parameter 1 to get
from: char const *const
to : char *
--- errorlevel 1
If I use the prototype in the 1st line:
int bar (const char *str1, const char *str2);
instead of the simple "int bar()", it works.
It seems dmc tries to "grow a brain" and create it's own internal
prototype based on the first call to bar(). Thus thinking it should
be "int bar (char *);", while it's not.
Why does it do that? Any reference to a C-standard supporting
this behaviour?
I know I should use full prototypes, but I encountered this while
porting a program that gcc/MSVC/Watcom has no problem with.
--
ManiaC++
Jan Knepper
Oct 14 2003
"Jan Knepper" <jan smartsoft.us> wrote:You might be running into one of Walter's inventions (if I remember correctly) here called "autoprototyping". You can turns this off with -pThat fixed it, thanks. --gv
Oct 14 2003








"Gisle Vanem" <giva users.sourceforge.net>