需要有关错误的帮助:期望的标识符或'(''''''令牌之前.我有一个主文件和一个排序堆文件.这三个文件都是独立的,我试图在终端上运行这些文件.命令行我用来在终端上运行这个文件是:
gcc -std=c99 -DRAND -DHEAP -DTYPE=double -DPRINT main.c srtheap.c
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
/*
*
* 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 */
Run Code Online (Sandbox Code Playgroud)
你的do-while循环有关于大括号的错误语法(需要一对do-while,还有一对for for循环.此外,你在之后缺少分号while.而你需要\ for for multiline宏.试试这个:
#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)
Run Code Online (Sandbox Code Playgroud)
一个#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)
Run Code Online (Sandbox Code Playgroud)
要非常小心,之后没有任何空格,\因为这会取消\并打破多行#define,这将导致很难找到编译错误.