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

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

如果我有一个 class, A, 有一个成员 m_data, 我需要声明它 static 或者当我 知道它会被用在第三方C函数中吗?

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

class A
{
public:
    Data m_data;
};

示例:

我有一个 class、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()的实现)无论如何都不"see"符号m_timer;所有 "sees" 都是它的 地址 (由 stop_timer() 代码传递),因此此时链接无关紧要。 (但请参阅下面关于回调的第二条评论,确实需要extern "C"。)