我应该将 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;
}
你不需要在这里添加static
到m_timer
。由于 stop_timer()
是 class Foo
的成员函数,我假设 Foo
的每个实例都有其 自己的 计时器,它将传递给 xTimerStop()
,而不是在 class Foo
的所有实例之间共享一个计时器——这是(唯一的)static
将实现的目标。
这里也不需要extern "C"
的任何声明; C部分(xTimerStop()
的实现)无论如何都不"see"符号m_timer
;所有 "sees" 都是它的 地址 (由 stop_timer()
代码传递),因此此时链接无关紧要。 (但请参阅下面关于回调的第二条评论,确实需要extern "C"
。)
如果我有一个 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;
}
你不需要在这里添加static
到m_timer
。由于 stop_timer()
是 class Foo
的成员函数,我假设 Foo
的每个实例都有其 自己的 计时器,它将传递给 xTimerStop()
,而不是在 class Foo
的所有实例之间共享一个计时器——这是(唯一的)static
将实现的目标。
这里也不需要extern "C"
的任何声明; C部分(xTimerStop()
的实现)无论如何都不"see"符号m_timer
;所有 "sees" 都是它的 地址 (由 stop_timer()
代码传递),因此此时链接无关紧要。 (但请参阅下面关于回调的第二条评论,确实需要extern "C"
。)