QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1089|回复: 11

问一个程序编辑器的问题,在线等待

[复制链接]
发表于 2006-5-1 10:42:22 | 显示全部楼层 |阅读模式
我发现在vi下似乎无法续行,例如
#define ERR_MESSAGE_LIST  {"NO_ERROR","CONNECT_FAIL","SEND_FAIL","RECE_FAIL",/           "OUT_OF_ORDER","ACCESS_MSG_QUEUE_FAIL","DATA_TOO_BIG_OR_SMALL",/
                "NO_SO_MANY_TICKETS"}
static char *ERR_MESSAGE_LIST[]=ERR_MESSAGE_LIST;
                                                     
cli_tic.c:8: parse error before '{' token (错误报告)
一行写不下,换到第二行时就会识别不了{},不知道哪位高手以前遇到过这种情况,请指点.
发表于 2006-5-1 10:53:20 | 显示全部楼层
续行符是这样的吗
回复

使用道具 举报

 楼主| 发表于 2006-5-1 10:55:25 | 显示全部楼层
如果用\这个的话还会报'"have stray \ ...."这种错误
回复

使用道具 举报

发表于 2006-5-1 11:12:37 | 显示全部楼层
在\后立即回车,不要有空格.
回复

使用道具 举报

 楼主| 发表于 2006-5-1 11:32:03 | 显示全部楼层
我这样作了之后,'"stray \ ...."是没有了,但是还是有这个cli_tic.c:8: parse error before '{' token,好像续行后就无法识别{ },一个很小的问题就把人搞得很郁闷,
回复

使用道具 举报

发表于 2006-5-1 11:54:09 | 显示全部楼层
贴出完整的
回复

使用道具 举报

发表于 2006-5-1 12:42:00 | 显示全部楼层
严格来讲楼主的宏定义是错误的,而且有时候会很难追踪这种错误。
比如:
[code:1]
#include <stdio.h>

#define echo(x) { printf("Here is a macro ouput:\n");\
printf("%d\n",x);}

int main(void)
{
        if(2>1) echo(9);
        else echo(0);
        return 0;
}
[/code:1]

乍看没问题,可是编译就是通不过。问题在于展开宏后,那个 if... else 语句语法就错了。

正确的代码应该是这样的:
[code:1]
#include <stdio.h>

#define echo(x) do{ printf("Here is a macro ouput:\n");\
printf("%d\n",x);}while(0)

int main(void)
{
        if(2>1) echo(9);
        else echo(0);
        return 0;
}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2006-5-1 18:53:12 | 显示全部楼层
很遗憾,我仔细检查了,不是宏定义的问题,我不做宏定义后还是有这样的错误出现,问题就是在续行后{}配对不能识别了.
回复

使用道具 举报

发表于 2006-5-1 19:27:03 | 显示全部楼层
ERR_MESSAGE_LIST  会被替换的.......
用gcc -E  就可以明白你错在哪里了
回复

使用道具 举报

发表于 2006-5-1 19:27:51 | 显示全部楼层
关键是你等号左边这个ERR_MESSAGE_LIST
回复

使用道具 举报

发表于 2006-5-1 19:34:12 | 显示全部楼层
楼主回去把C好好再看一遍再说
回复

使用道具 举报

 楼主| 发表于 2006-5-1 20:12:08 | 显示全部楼层
多谢你们几位,我的问题解决了,有时间再和你们说
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 16:33 , Processed in 0.039398 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表