我正在研究全局变量的行为.
到目前为止,我认为全局变量的多重定义是一种非法方式,必须得到一个错误.但是我从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)
Borland C/C++:
c:\test>bcc32 test1.c test2.c
Run Code Online (Sandbox Code Playgroud)GCC:
c:\test>gcc test1.c test2.c
Run Code Online (Sandbox Code Playgroud)没有错误,编译和链接成功(对我来说这是意料之外的.)执行后test1.exe,控制台上打印出2.这是num定义的价值test2.c.
GCC给了我一个多重定义的错误num.当然,a.exe没有制作.(这是我所期待的)
为什么会这样?请告诉我.谢谢!
我想通过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 …