我有一个在函数中更新的ptr
变量。我想将此变量传递给function2
,它位于不同的.c文件中。
将静态变量传递给不在同一.c文件中的函数是否合法?仅保留一个没有ptr
关键字的全球static
会更安全吗?
static Event * ptr = NULL;
void function(Event * newPtr)
{
ptr = newPtr;
function2(ptr);
}
//in separate c file
void function2(Event * pointer)
{
pointer->event = 2;
}
答案 0 :(得分:3)
static
说明符仅限制变量的范围(internal linkage
)。
但是当你传递ptr
时,将使用ptr
中包含的地址,这是完全合法的(编译没问题,因为你没有使用变量ptr
,你正在使用包含在其中的值)。
但是在你这样做之前要三思,因为如果其他人查看你的代码你声明为static
,它会给人一种只在这个文件中使用该变量的印象。如果function2
中的代码对传递的指针执行任何操作(假设您已经为指针动态分配了内存并且它在function2
中被释放,并且您尝试在您声明ptr
的文件中删除/访问1}})。
如果您处理function2
与指针有关的内容,那么这样做是完全安全的。但正如我上面提到的,这样做并不是一个好习惯。
答案 1 :(得分:2)
静态变量
static Event * ptr = NULL;
从其他源文件中看不到,但是如果你把它作为参数传递,它只是像其他指针一样被复制到堆栈上,所以你可以这样做。
但我会将其作为const
指针传递,明确将其传递给其他人{/ 1}}变量。
static
答案 2 :(得分:1)
你可以用它做任何你想做的事。静态意味着全球存储&&本地文件 symbo l可见性。但是可以根据需要使用变量