www.digitalmars.com Home | Search | C & C++ | D | DMDScript | News Groups | index | prev | next
Archives

D Programming
D
D.gnu
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger

C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows

digitalmars.empire
digitalmars.DMDScript

c++ - Cast error message

↑ ↓ ← "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
↑ ↓ 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
↑ ↓ → "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