c - 收到错误 : expected identifier or '(' before '{' token

标签 c

需要有关错误的帮助:预期标识符或“{”标记之前的“(”。我有一个主文件和一个排序堆文件。这三个文件都是分开的,我试图在终端上运行这些文件。我用来在终端上运行此文件的命令行是:

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/

相关文章:

c - 如何使用 JNI 在 C 中获取 jobject 的字符串值?

c - Linux下socket如何生成随机文件名?

用 C 语言为多线程服务器创建作业队列

c - getrusage 返回四舍五入的数字

c - 结构体指针的 undefined symbol

c - 我很难理解 char 类型

c - 在 C 中使用详细选项进行编程

c - 系统崩溃时 clflush 或 clflushopt 是原子的吗?

c - 什么时候用箭头,什么时候用点?

c - TCP 连接 : Recreating a socket that has been closed