将静态变量传递到函数
我有一个ptr
变量在函数中更新。我想将这个变量传递给function2
,这是在另一个.c文件中。 将静态变量传递给不在同一个.c文件中的函数是合法的吗?如果没有static
关键字,只保留全局ptr
会更安全吗?将静态变量传递到函数
static Event * ptr = NULL;
void function(Event * newPtr)
{
ptr = newPtr;
function2(ptr);
}
//in separate c file
void function2(Event * pointer)
{
pointer->event = 2;
}
静态变量
static Event * ptr = NULL;
不能从其他来源的文件中看到,但如果你把它作为一个参数,它只是复制在堆栈上同其他指针,这样你就可以这样做的。
但我会通过它作为const
指针和明确文件说它是static
变量为他人。
void function2(Event * const pointer)
{
pointer->event = 2;
}
为什么'const'和explicity会记录它?这没有理由。 – tilz0R
static
符仅限制变量(internal linkage
)的范围。 但是,当您通过ptr
时,将使用ptr
中包含的地址,这是完全合法的(编译时没有问题,因为您没有使用变量ptr
,您正在使用其中包含的值)。
但是在做这件事之前请三思,因为如果其他人查看您的代码时您声明为static
,则会给人一种印象,即该变量仅在此文件中使用。如果function2
中的代码对传入的指针做了任何操作(假设您已将内存动态分配给指针,并且它在function2
中释放,并且您试图在您声明ptr
的文件中删除/访问)。
如果你照顾function2
即将与指针做什么,那么它完全安全的做到这一点。但正如我上面提到的,这样做不是一个好习惯。
你可以随心所欲地做任何事情。静态意味着全局存储& &本地文件符号 l可见性。但变量可以随意使用
是的,这是合法的。不管它是否“正确”取决于该功能对数据的作用。 – StoryTeller
当你在一个函数调用中使用一个变量时,你并不真正传递这个变量本身,它只是* value *。或者说,它的价值*拷贝*。 –
为什么'function2(ptr)'而不是'function2(newPtr)'直接? –