gcc检测不到的逻辑错误?

7 篇文章 0 订阅

    今天尝试《UNIX环境高级编程》的例1-5,代码如下:

#include <sys/types.h>
#include <sys/wait.h>
#include "ourhdr.h"


int main(void)
{
        char    buf[MAXLINE];
        pid_t   pid;
        int     status;

        printf("%% ");  /* print prompt (printf requires %% to print %) */
        while (fgets(buf, MAXLINE, stdin) != NULL) {
                buf[strlen(buf) - 1] = 0;  /* replace newline with null */
                if ((pid = fork()) < 0)
                        err_sys("fork error");
                else if (pid == 0) {
                        execlp(buf, buf, NULL);
                        err_ret("couldn't execute: %s", buf);
                        exit(127);
                }

                /* parent */
                if ((pid = waitpid(pid, &status, 0)) < 0)
                        err_sys("waitpid error");
                printf("%% ");
        }
        exit(0);
}

    ourhdr.h头文件是附录2里面的内容,这个程序不能直接运行,读者想尝试的需要把附录2的内容包含进来一起编译

    悲剧的是我把这一行敲成这样了:

 

    gcc -v出来的版本是“gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)”

    使用gcc 1-5.c ourhbr.c编译没有报任何错就通过了,但是执行程序怎么也打不到预期的结果:

纳闷了半天,最后突然看到这行语句右边没有值,果断赋值了就解决了:

粗细啊,对着巧都敲错了,不过也好,这样就发现gcc居然对这种不赋值的表达式居然不报错。不知道高版本如何

个人觉得这个不利于排错啊,尤其是我这样的马大哈啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值