在这段代码中:
#include<stdio.h>
int var=100;
int main()
{
extern int var; //Declaration not Definition
printf("%d\n",var);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
100被印刷,其是什么不正常的,但是,当声明从除去main()中,即使在当时正在使用全局定义.这是怎么回事?这取自K&R,其中说:
还必须在每个想要访问它的函数中声明(全局)变量.
在创建函数时atof,我将整个工作分成两个单独的转换单元:
MC
#include<stdio.h>
extern fun(char[]); //return type not mentioned on purpose
int main()
{
printf("%d\n",fun("+123.980")); //%f would also display 0.000000
return 0;
}
Run Code Online (Sandbox Code Playgroud)
NC
#include<ctype.h>
float fun(char c[])
{
float val=0, pow=1;
int i;
int sign;
for(i=0;isspace(c[i]);i++); //SKIPPING WHITESPACE IF ANY
if(c[i]=='+')
sign = 1;
if(c[i]=='-')
sign =-1;
++i;
for(;c[i]!='.';i++)
val = val*10 + (c[i]-'0');
++i;
while(isdigit(c[i]))
{
val = val*10 + (c[i]-'0');
pow=pow*10;
++i;
}
return sign*val/pow;
}
Run Code Online (Sandbox Code Playgroud)
警告说int在这种情况下函数的类型将默认为,因为全局空间中的每个变量/函数类型都没有明确提到任何返回类型,默认为int.
我期待输出int版本为+123.980,即仅123 …