将指针传递给C中的静态全局变量

时间:2014-03-14 14:33:53

标签: c static-variables

将指向静态结构的指针传递给函数是否安全?

我有这样的事情:

mymodule.c:

static MYEVENT_STRUC_T event;
uint_32 _myRtos_set_event(MYEVENT_STRUCT_T* event_ptr, uint_32 mask);

uint_32 mymodule_set_event(uint_32 event_mask){   

    /* Kernel function */
    /* Defined outside mymodule.c,*/
    /* Is it safe to call it with &event?  */
    return _myRtos_set_event(&event, event_mask);

}

2 个答案:

答案 0 :(得分:10)

很安全。 static并不意味着“不能在模块之外使用”,而是“不能在模块之外引用”,即符号本身不会被导出,但变量仍然存在于某处过程的记忆也可以在模块之间使用。

我唯一不确定的是,我不确定通过指针将数据从用户模式传递到内核模式是否安全,如果这就是你正在做的事情。如果我没记错的话,你应该调用一些函数将内存从用户空间复制到内核空间。但不完全确定。

答案 1 :(得分:0)

请考虑:

Preproccessor(*.h,*.hh , in newr version without suffix)>>>>>source files(*.c, *.cc *.cpp)>>>>Linker(*.o or *.obj , it's related to your compier)>>>>your output

根据上述结构,您无法在源文件中定义变量,数组或其他内容。 您应该在头文件中将变量定义为extern,然后在源文件中使用它。