小编pro*_*rog的帖子

为什么Borland在不同的C文件中编译同一个对象的多个定义,而GCC没有?

我正在研究全局变量的行为.

到目前为止,我认为全局变量的多重定义是一种非法方式,必须得到一个错误.但是我从Borland C/C++编译器得到了意想不到的结果,而GCC给了我预期的结果.

码:

test1.c:

#include<stdio.h>

void func(void);

int num=1;

void main(){
    func();
    return;
}
Run Code Online (Sandbox Code Playgroud)

test2.c:

#include<stdio.h>

int num=2;

void func(){    
    printf("%d",num);
    return;
}
Run Code Online (Sandbox Code Playgroud)

在MS-DOS提示符下

结果

  • Borland C/C++:

没有错误,编译和链接成功(对我来说这是意料之外的.)执行后test1.exe,控制台上打印出2.这是num定义的价值test2.c.

  • GCC:

GCC给了我一个多重定义的错误num.当然,a.exe没有制作.(这是我所期待的)

为什么会这样?请告诉我.谢谢!

c gcc borland-c++

5
推荐指数
1
解决办法
171
查看次数

我在使用sscanf函数时犯了错误吗?

我想通过sscanf从hoge.txt获取数据.(见下文)

但我得到了好奇的结果.

我不明白为什么会这样.

请帮忙.

我通过Borland C/C++ 5.5.1为Win32编译和链接 - 如果有帮助的话.

#include<stdio.h>
#include<string.h>

int main(int argc, char *argv[]){

    FILE *fp;
    char buf[100];
    char name1[100];
    char name2[100];
    int distance1;
    int distance2;

    /* file open */
    fp = fopen(argv[1],"r");
    if(fp == NULL){
       return -1;
    }

    /* get a line */
    fgets(buf,100,fp);

    /* change \n to \0 */
    strtok(buf,"\n");

    /* get values from buf */
    sscanf(buf,"%s,%d; %s,%d;",name1,&distance1,name2,&distance2);

    /* for tests */
    printf("%s\n",name1);
    printf("%s\n",name2);
    printf("%d\n",distance1);
    printf("%d\n",distance2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

【hoge.txt】※只是一条线

Ramytdb,2683; Voclqmb,5236;

【结果】

Ramytdb,2683; ワlレwD 1 …

c

1
推荐指数
1
解决办法
125
查看次数

标签 统计

c ×2

borland-c++ ×1

gcc ×1