需要有关错误的帮助:预期标识符或“{”标记之前的“(”。我有一个主文件和一个排序堆文件。这三个文件都是分开的,我试图在终端上运行这些文件。我用来在终端上运行此文件的命令行是:
gcc -std=c99 -DRAND -DHEAP -DTYPE=double -DPRINT main.c srtheap.c
这是我的代码:
/*
*
* srt.h file
*
*/
#ifndef SRT_H
#define SRT_H
#include < string.h >
#define MAX_BUF 256
#define swap(qx,qy,sz)
{
do
char buf[MAX_BUF];
char *q1 = qx;
char *q2 = qy;
for (size_t m, ms = sz; ms > 0; ms -= m, q1 += m, q2 += m) {
m = ms < sizeof(buf) ? ms : sizeof(buf);
memcpy(buf, q1, m);
memcpy(q1, q2, m);
memcpy(q2, buf, m);
while (0)
}
void srtbubb(void *, size_t, size_t, int (*)(const void *, const void *));
void srtheap(void *, size_t, size_t, int (*)(const void *, const void *));
void srtinsr(void *, size_t, size_t, int (*)(const void *, const void *));
void srtmerg(void *, size_t, size_t, int (*)(const void *, const void *));
#endif /* SRT_H */
最佳答案
多行宏的#define
要求您以\
结束每一行(最后一行除外)。所以你会得到:
#define swap(qx,qy,sz) \
do { \
char buf[MAX_BUF]; \
char *q1 = qx; \
char *q2 = qy; \
for (size_t m, ms = sz; ms > 0; ms -= m, q1 += m, q2 += m) { \
m = ms < sizeof(buf) ? ms : sizeof(buf); \
memcpy(buf, q1, m); \
memcpy(q1, q2, m); \
memcpy(q2, buf, m); \
} \
} while (0)
注意不要在 \
之后有任何空格,因为这会取消 \
并破坏多行 #define
,这将导致难以发现编译器错误。
关于c - 收到错误 : expected identifier or '(' before '{' token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346084/