读书人

莫名其妙的编译异常

发布时间: 2012-05-02 15:36:04 作者: rapoo

莫名其妙的编译错误
看下这这小段代码

C/C++ code
#include <stdlib.h>#include <stdio.h>#include <string.h>int main(){    char buf[6];    //单独注释掉这段没有错误    while (1)    {        fgets(buf, 6, stdin);        printf("%s", buf);    }    //////////////////////////////////////////////////////////////////////////    //单独注释掉这段也没有错误    int *p1 = malloc(10 * sizeof(int));    int *p2 = calloc(10, sizeof(int));    free(p1);    free(p2);    //////////////////////////////////////////////////////////////////////////    return 0;}


里面有两小段不相关的代友,这是我测试时写的,但是两段代码注释掉其中任意一段,都没有编译错误,但两段代码同时编译的话,就报错,下面是错误:

引用
1>------ 已启动生成: 项目: TestAlloc, 配置: Debug Win32 ------
1>正在编译...
1>alloc.c
1>d:\testcode\testalloc\testalloc\alloc.c(19) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\testcode\testalloc\testalloc\alloc.c(20) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\testcode\testalloc\testalloc\alloc.c(22) : error C2065: “p1”: 未声明的标识符
1>d:\testcode\testalloc\testalloc\alloc.c(22) : warning C4022: “free”: 指针与实参 1 不匹配
1>d:\testcode\testalloc\testalloc\alloc.c(23) : error C2065: “p2”: 未声明的标识符
1>d:\testcode\testalloc\testalloc\alloc.c(23) : warning C4022: “free”: 指针与实参 1 不匹配
1>生成日志保存在“file://d:\TestCode\TestAlloc\TestAlloc\Debug\BuildLog.htm”
1>TestAlloc - 4 个错误,2 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========


代码本身应该没有问题,不清楚为什么?以前也经常遇到。编译器是vs2008

[解决办法]
探讨

引用:
把p1,p2 的定义放在前面试试

char buf[6];
int *p1, *p2;

while..
..

可以,为什么???

读书人网 >C语言

热点推荐