C的宏语法问题
ftp://legacy.gsfc.nasa.gov/software/fitsio/c/cfortran.h中的代码:
static char *c2fstrv( cstr, fstr, elem_len, sizeofcstr)
char* cstr; char *fstr; int elem_len; int sizeofcstr;
这段看不懂,什么语法?static char *c2fstrv( cstr, fstr, elem_len, sizeofcstr)可能是宏,但是,后面什么意思?
上下文如下:
#ifndef __CF__KnR
static char *c2fstrv(char* cstr, char *fstr, int elem_len, int sizeofcstr)
#else
static char *c2fstrv( cstr, fstr, elem_len, sizeofcstr)
char* cstr; char *fstr; int elem_len; int sizeofcstr;
#endif
{ int i,j;
/* elem_len includes \0 for C strings. Fortran strings don't have term. \0.
Useful size of string must be the same in both languages. */
for (i=0; i<sizeofcstr/elem_len; i++) {
for (j=1; j<elem_len && *cstr; j++) *fstr++ = *cstr++;
cstr += 1+elem_len-j;
for (; j<elem_len; j++) *fstr++ = ' ';
} /* 95109 - Seems to be returning the original fstr. */
return fstr-sizeofcstr+sizeofcstr/elem_len; }
[解决办法]
这是所谓K&R C的语法,不是ANSI C:
static char *c2fstrv( cstr, fstr, elem_len, sizeofcstr)
char* cstr; char *fstr; int elem_len; int sizeofcstr;
{ int i,j;
/* elem_len includes \0 for C strings. Fortran strings don't have term. \0.
Useful size of string must be the same in both languages. */
for (i=0; i<sizeofcstr/elem_len; i++) {
for (j=1; j<elem_len && *cstr; j++) *fstr++ = *cstr++;
cstr += 1+elem_len-j;
for (; j<elem_len; j++) *fstr++ = ' ';
} /* 95109 - Seems to be returning the original fstr. */