免费注册 查看新帖 |

Chinaunix

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

程序编译时报错outside C99 mode [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-23 20:56 |只看该作者 |倒序浏览
本帖最后由 david0 于 2011-10-24 20:56 编辑

我写个程序,用于输入:n
(在父进程中输入)
输出:从1到n的整数
(子进程负责打印)
父进程打印子进程的PID,然后等待子进程结束,最后输出child complete
退出系统

vi lianxi2.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){

int mainProcessID = getpid();//通过getpid函数获取主进程的ID。
int n = 0;
printf("请输入数值n");
scanf("%d", &n);

int childProcessID = fork();//通过fork函数创建子进程并同时获取进程ID

//注意此处,主、子进程都将执行以下代码,因此按照题意需要进行处理
if(getpid() == childProcessID){
  for(int i=0; i<n; i++){
   printf("%d\r\n", i+1);
  }
}
else{
  wait(childProcessID);//通过wait方法让主线程等待
  printf("Child complete");
  exit(0);
}
}
在redhat linux下编译时报错
# gcc -o lianxi2 lianxi2.c
lianxi2.c: In function `main':
lianxi2.c:15: error: 'for' loop initial declaration used outside C99 mode
在gcc加上-std=c99时也报warning
# gcc -std=c99 -o lianxi2 lianxi2.c
lianxi2.c: In function `main':
lianxi2.c:20: warning: implicit declaration of function `wait'

请问如何修改?

论坛徽章:
0
2 [报告]
发表于 2011-10-23 21:09 |只看该作者
我不懂为什么有那么多连scanf()都不会写的人来搞什么linux编程。

论坛徽章:
0
3 [报告]
发表于 2011-10-23 21:11 |只看该作者
我不懂为什么有那么多连scanf()都不会写的人来搞什么linux编程。
x5miao 发表于 2011-10-23 21:09



    淡定,其实scanf没几个人真的懂

http://bbs.chinaunix.net/thread-3610539-1-1.html

论坛徽章:
0
4 [报告]
发表于 2011-10-23 21:14 |只看该作者
if(getpid() == childProcessID){
-------------------------------------------------

这个错了。楼主大概需要看下fork返回值的含义

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
5 [报告]
发表于 2011-10-23 21:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2011-10-23 21:21 |只看该作者
if(getpid() == childProcessID){
-------------------------------------------------

这个错了。楼主 ...
X-Hawk 发表于 2011-10-23 21:14



    這個雖然古怪,但也算不上錯。

论坛徽章:
0
7 [报告]
发表于 2011-10-23 21:24 |只看该作者
這個雖然古怪,但也算不上錯。
MMMIX 发表于 2011-10-23 21:21



   你想下在主、子进程里,getpid()和childProcessID分别为多少?
if( getpid() == childProcessID )

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2011-10-23 21:25 |只看该作者
本帖最后由 MMMIX 于 2011-10-23 21:30 编辑
你想下在主、子进程里,getpid()和childProcessID分别为多少?
X-Hawk 发表于 2011-10-23 21:24



    你想了麼?當然,這個語句達不到區分父字進程的目的,要說它錯了也使得。

论坛徽章:
0
9 [报告]
发表于 2011-10-23 21:34 |只看该作者
你想了麼?當然,這個語句達不到區分父字進程的目的,要說它錯了也使得。
MMMIX 发表于 2011-10-23 21:25



    对头!这个if,无论主进程还是子进程,都不可能条件成立。
所以楼主必定理解错了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2011-10-23 21:37 |只看该作者
回复 4# X-Hawk


    樓主的程序,我認為問題有這麼幾個:
1、頭文件缺失。
2、printf(), scanf(), fork() 使用有誤/不當
3、標識符命名不和 C 的習慣,縮進不當
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP