繁体   English   中英

我是否应该将将由C函数使用的成员变量声明为静态变量?

[英]Should I declare member variables that are going to be used by C functions as static?

如果我有一个成员m_data的类A ,当我知道它将在第三方C函数中使用时,是否需要将其声明为static或具有C链接?

struct Data
{    
    int a;
    float b;        
    double c;
};

class A
{
public:
    Data m_data;
};

例:

我有一个类Foo ,它正在执行以下操作(使用FreeRTOS计时器):

class Foo
{
public: 
    void stop_timer() { xTimerStop(&m_timer, 0); }
private:
    TimerHandle_t m_timer;
}

我正在调试一些底层的怪异现象,并且担心(可能是错误地)将C ++成员变量传递给FreeRTOS函数会导致我遇到问题。

class Foo
{
public: 
    void stop_timer() { xTimerStop(&m_timer, 0); }
private:
    TimerHandle_t m_timer;
}

并不需要添加staticm_timer这里。 stop_timer()是其成员函数class Foo ,我假定的每个实例Foo将具有其自己的计时器,它将传递给xTimerStop()的所有实例之间共享,而不是一个定时器class Foo -它是(唯一事)什么static会实现。

您也不需要此处的任何extern "C"声明; C部分( xTimerStop()的实现) xTimerStop()不会“看到”符号m_timer 它“看到”的只是它的地址 (由stop_timer()代码传递),因此此时的链接无关紧要。 (但是请参阅下面有关回调的第二条评论,它确实需要extern "C" 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM