gpt4 book ai didi

C++ 在 if 条件下使用 g++ 定义一个静态变量

转载 作者:行者123 更新时间:2023-11-28 02:13:55 25 4
gpt4 key购买 nike

以下宏在 Vistual Studio C++ 中编译(并非如下所示):

#define LogMacro(ChannelID) \
if(static ChannelSettingStruct* channel_settings = SingletonClass()->Instance()->GetSettings(ChannelID))
... use channel_settings to determine the settings of a channel/component and log accordingly...
... for example if logging for a channel is enabled or disabled ...
... if all the conditions are true then write log to file using the macro below. Just like std::cout it uses << operator to pump char to stream ...
LogToFileMacro(channel ...)

上面宏的用法:

LogMacro("ExampleChannel") << "Some text to log" ;
  1. channel ID 用于通过 channel 区分日志,例如 channel 1、 channel 2
  2. 上面的宏在 Visual Studio 中有效。
  3. 我使用宏来减少函数调用的次数。
  4. 如果可以的话,我绝对会避免使用宏。但我被迫使用宏。

问题:

但是,当我使用 g++ 编译器时,同一个宏会引发以下错误:

error: decl-specifier invalid in condition

那是因为g++不允许在if条件下声明静态变量。我将变量“channel_settings”设置为静态的原因是因为我认为它会导致每个 ChannelID 有一个拷贝。但是我不确定这一点。

我的目标是在宏中定义一个指针变量,这样当我再次调用同一个宏时,编译器就不会因为重新定义该变量而引发错误。就像在 Visual Studio C++ 中一样。

g++ 不允许这样做。

是否有针对 g++ 编译器的解决方法?

最佳答案

My aim is to define a static variable in a macro so that when I call the same macro again, the compiler does not raise an error due to redefinition of that variable.

宏不是这样工作的。当你有一个宏时,它会直接用宏的内容替换宏使用的行。如果您在多个地方调用宏,那么您将重新定义变量。

在 C++ 中,这通常可以使用一个函数来解决,并声明一个函数局部静态变量。

关于C++ 在 if 条件下使用 g++ 定义一个静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34683821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com