免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1720 | 回复: 15
打印 上一主题 下一主题

求助,linux下c程序的简单问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-15 16:31 |只看该作者 |倒序浏览
我在linux下编译以前同事留下来的C程序,他写好了Makefile,我直接make,但出现很多错误,我发现都是c程序在函数中定义变量产生的,比如:
程序(部分)
void* ReadThread(void* argList)
{
        struct log_device* log;
        int returnAction;
        int bStopThread = 1;//这前面定义的变量不出现错误
        log = (struct log_device*)argList;
        //int bStopThread = 1;
        while(bStopThread){
                log_message(log,"[thread]:","******************thread thread**********************");
                char * ctrlMsg;//但在这儿定义的变量就提示出错,这是怎么回事啊?急死我了
                ctrlMsg = calloc(40,sizeof(char *));
                char subCode[5];
}
}       
错误(部分):
gcc -c  -Wall -g -I./log/include -I./db/include -I./manager/include -I./action/include  manager/src/manager.c  -o manager/obj/manager.o
manager/src/manager.c: In function `ReadThread':
manager/src/manager.c:13: parse error before `char'
manager/src/manager.c:14: `ctrlMsg' undeclared (first use in this function)
manager/src/manager.c:14: (Each undeclared identifier is reported only once
manager/src/manager.c:14: for each function it appears in.)
manager/src/manager.c:15: parse error before `char'
manager/src/manager.c:20: `sendStr' undeclared (first use in this function)
manager/src/manager.c:21: `actionNumStr' undeclared (first use in this function)
manager/src/manager.c:23: `cpContent' undeclared (first use in this function)
manager/src/manager.c:24: parse error before `int'
不知道哪儿不对,linux刚用,谢谢大家啊。

论坛徽章:
0
2 [报告]
发表于 2005-11-15 16:34 |只看该作者
多基础的东西呀..

你换g++编译器就可以了, 因为c++可以随意声明变量.

论坛徽章:
0
3 [报告]
发表于 2005-11-15 16:39 |只看该作者
楼上说的我不明白 期待更具体一点^_^

楼主 是不是少了一个#include文件或者语句???

论坛徽章:
0
4 [报告]
发表于 2005-11-15 16:40 |只看该作者
原帖由 yulc 于 2005-11-15 16:34 发表
多基础的东西呀..

你换g++编译器就可以了, 因为c++可以随意声明变量.

严重同意

论坛徽章:
0
5 [报告]
发表于 2005-11-15 16:42 |只看该作者
原帖由 yulc 于 2005-11-15 16:34 发表
多基础的东西呀..

你换g++编译器就可以了, 因为c++可以随意声明变量.



所谓的"随意声明变量"
哪位能给我说的更清楚一点^_^
难道GCC不能"随意"声明变量?
给个解释^_^

论坛徽章:
0
6 [报告]
发表于 2005-11-15 16:43 |只看该作者
楼主呀, 你乍这么像四项基本原则年前的我呢
把下面两行换个位置:

             log_message(log,"[thread]:","******************thread thread**********************");
                char * ctrlMsg;//但在这儿定义的变量就提示出错,这是怎么回事啊?急死我了

论坛徽章:
0
7 [报告]
发表于 2005-11-15 16:55 |只看该作者
谢谢各位的回复.我觉得这跟随意声明变量没关系,应该是我调试时哪儿没设置对,我写个小程序,把变量声明到while{}里面程序都是能执行的。

论坛徽章:
0
8 [报告]
发表于 2005-11-15 17:00 |只看该作者
第一次在这个论坛上发贴问问题,原来这么多人在,好感动哟,谢谢各位

论坛徽章:
0
9 [报告]
发表于 2005-11-15 17:02 |只看该作者
还没明白呀, 这样说吧:

在C语言里面, 你必须把变量的声明放在一个作用域的最前面...
例如函数最面前, 循环体 "{" 的后面..

你要还不明白,我也无法了


真的好无聊呀...

论坛徽章:
0
10 [报告]
发表于 2005-11-15 17:03 |只看该作者
编译开关,应当是在c89以后的标准里面支持这种形式的变量定义吧
-std=
  c89
  iso9899:1990
      ISO C90

  iso9899:199409
      ISO C90 as

  c99
  c9x
  iso9899:1999
  iso9899:199x

在你的编译开关里面显式指出-std=c89以后的,我也记不大清楚是哪一个标准了,自己试一下吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP