www.digitalmars.com         C & C++   DMDScript  

c++ - Cast error message

reply "Gisle Vanem" <giva users.sourceforge.net> writes:
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

^ 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. # rm /bin/laden /bin/laden: Not found
Oct 14 2003
parent reply Jan Knepper <jan smartsoft.us> writes:
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
parent "Gisle Vanem" <giva users.sourceforge.net> writes:
"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 -p

That fixed it, thanks. --gv
Oct 14 2003