我试图通过以下方式从其他文件访问静态变量。 你能帮忙打印变量' c'在file1.c。
找到下面的代码
FILE1.C
void main(void)
{
int m;
m=func_ret();
printf("\n m = %d\n",m);
}
file2.c中
static int c =5;
int *func_ret(void)
{
printf("\n c = [%d]\n",c);
return &c;
}
答案 0 :(得分:4)
这里的问题是,您从func_ret()
返回一个指针,然后尝试捕获int
变量中的返回值,然后尝试使用%d
打印该值。它主要调用undefined behaviour。
供参考,C11
,章节§6.3.2.3
任何指针类型都可以转换为整数类型。除了之前指定的以外,结果是实现定义的。如果结果无法以整数类型表示,则行为未定义。结果不必在任何整数类型的值范围内。
解决方案:您需要将m
的类型从int
更改为int *
。您还必须使用适当的格式说明符。
另请注意,main()
的推荐签名为int main(void)
。
答案 1 :(得分:3)
将您的file1.c
更改为:
#include <stdio.h>
extern int *func_ret(void);
int main(void)
{
int *m = 0;
m=func_ret();
printf("\n m = %d\n",*m);
//some code
return 0;
}
file2.c
来:
#include <stdio.h>
static int c = 5;
int *func_ret(void)
{
printf("\n c = [%d]\n",c);
return &c;
}
此外,您应养成使用int main(void)
代替void main()
的习惯。
由于那部分不在这个问题的范围内,而不是详细地写下它,我将分享相关问题的链接:
int main(void) vs void main()和,
Why do we need to use int main
and not void main
in C++?