将静态变量传递给函数

时间:2017-08-10 05:44:27

标签: c

我有一个在函数中更新的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;
}

3 个答案:

答案 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可见性。但是可以根据需要使用变量