C错误:在令牌之前的预期表达式

时间:2012-10-02 20:56:29

标签: c

当我尝试编译代码时,我一直收到此错误:

cc -Wall -Werror -g -c -o lwp.o lwp.c
lwp.c: In function ânew_intel_stackâ:
lwp.c:120: error: expected expression before â.â token
lwp.c:122: error: expected expression before â.â token
lwp.c:124: error: expected expression before â.â token
lwp.c:126: error: expected expression before â.â token
lwp.c:130: error: expected expression before â.â token
lwp.c:132: error: expected expression before â.â token
lwp.c:134: error: expected expression before â.â token
lwp.c:136: error: expected expression before â.â token
lwp.c:138: error: expected expression before â.â token
lwp.c:140: error: expected expression before â.â token
lwp.c:142: error: expected expression before â.â token
make: *** [lwp.o] Error 1

它所指的功能在这里:

/* make ourselves a nice intuitive "push()" macro */
#define push(sp,val) (*(..sp)=(unsigned)(val))

unsigned long *new_intel_stack(unsigned long *sp,lwpfun func, void *arg) {
    unsigned long *ebp;
    push(sp,arg); /* argument */
    push(sp,lwp_exit); /* for lwp return purposes */
    push(sp,func); /* function's return address */
    push(sp,0x1abcdef1); /* bogus "saved" base pointer */
    ebp=sp; /* remember sp from this point for later */
    push(sp,0x6c6f7453); /* push initial eax, ebx, ecx, edx, esi and edi -- bogus */
    push(sp,0x66206e65);
    push(sp,0x206d6f72);
    push(sp,0x746e6957);
    push(sp,0x32207265);
    push(sp,0x21363030);
    push(sp,ebp); /* push initial edp */
    return sp;
}

我真的不知道为什么我会收到这个错误。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

错误是由宏内的..序列引起的。

宏观定义中..应该是什么意思?

(*(..sp)=(unsigned)(val))

C语言中没有任何内容符合您对..的使用情况。 C有.运算符,但它不能像在宏中使用它一样使用。

答案 1 :(得分:0)

你的意思是

#define push(sp,val) (*(--sp)=(unsigned)(val))

...