On Thu, 2005-03-10 at 14:33 +0100, Ralf Ertzinger wrote: > Hi. > > I am getting a GCC error while compiling a package (which is not part of FC), > and I'd like to know if this is a gcc4 bug (which I think it is): > > The compile dies with: > > configfile.c:87:73: error: macro "read" passed 4 arguments, but takes just 3 > configfile.c: In function 'xmms_cfg_read_value': > configfile.c:86: warning: return makes integer from pointer without a cast > configfile.c:95:66: error: macro "read" passed 4 arguments, but takes just 3 > configfile.c: In function 'xmms_cfg_write_value': > configfile.c:94: warning: statement with no effect > > > The line in question reads: > > 82 gboolean xmms_cfg_read_value(ConfigFile * config_file, > 83 const gchar * section, const gchar * key, > 84 XmmsCfgValueType value_type, gpointer * value) > 85 { > 86 return xmms_cfg_value_type_func[value_type].read(config_file, > 87 section, key, value); > 88 } > > I think glibc implemets the read system call as a macro, and GCC tries to > apply this macro to the .read part above. Am I correct? If yes, is GCC > correct in doing this? > Posix explicitly allows this. Using standard function names in that way is just a bad idea, like to using C++ keywords. One way to work around this is to use (read) instead of read (the parens prevent macro expansion). Matthias