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.creturn 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 */ } ----------------- ManiaC++ Jan Knepperdmc -c test.creturn 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.
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