【发布时间】:2013-10-27 20:11:17
【问题描述】:
我有一个文件,其中有一个全局数组
static char name[6];
还有一个函数
static char* gen_name(char* dest, const size_t len) {
for (int i = 0; i < len - 1; ++i)
dest[i] = 'A' + (genrand_uint32() % ('Z' - 'A'));
dest[len - 1] = '\0';
return dest;
}
指向名称的指针然后存储在不同头文件中的全局变量中,该变量不是静态的。
this_name = gen_name(name, sizeof name);
当另一个文件中的函数使用这个指针时,它在 Linux 上运行良好,但是当我在微控制器上运行相同的代码时,它会打印垃圾。
当我删除 static 关键字时,它工作正常。
为什么会这样?
什么时候应该使用static?
我以为我应该将所有未在文件外使用的变量和函数声明为static,这是错误的吗?
【问题讨论】:
-
显示变量
name填入的代码。 -
static char* gen_name(...)并没有按照你的想法去做。 -
@RaymondChen 怎么样? (注意:
for标头之后第二行的缩进令人困惑,但不影响编译器如何查看它。) -
对我来说,这看起来像是一个过度活跃的编译器,它以不应该的方式优化代码。使用
-O0编译时问题是否仍然存在? -
@NikosC。看起来 OP 认为它是一个返回指向静态字符的指针的函数。但实际上它是一个返回char指针的静态函数。
标签: c