c++中#定义的标识符有问题

Trouble with #defined identifier in c++

本文关键字:标识符 有问题 定义 c++      更新时间:2023-10-16

我正在编写一个广泛依赖标识符的程序:

#define NUMBER_OF_ELEMENTS 12

该参数用于多个项目(在一个解决方案中)。问题是我有两个模式:第一个NUMBER_OF_ELEMENTS是12,第二个NUMBER_OF_ELEMENTS等于16。

有没有办法在运行时更改参数的值?如果没有,周围还有工作吗?

提前感谢!

#define为预处理器提供常量。它们在运行时不可用,也不能直接用于编译器本身。

如果希望在运行时更改此值,则需要使用运行时变量。定义这一点的最佳方式在很大程度上取决于程序的结构。

正如其他人已经说过的,您不能在运行时更改此值,因为预处理器在编译前会将NUMBER_OF_ELEMENTS更改为12/16。

您可以从将NUMBER_OF_ELEMENTS更改为全局常量开始。当然,这也不是一个很好的解决方案,但你可以从那里开始(也许是一些对象管理它,如果不了解你的程序的细节,我真的无法告诉更多)。

C++宏在编译时使用,如果您需要在运行时更改的内容,可以创建全局或静态变量。

如果是一个整数参数,很多代码都依赖于该参数,那么在运行时更改最好通过从一个实现更改到另一个实现来实现,最好使用模板:

代码中。h:

#include <stdexcept>
template<int NumberOfElements>
struct ComplicatedCode
{
  void run(int, char**);
};
void RunComplicatedCode(int NumberOfElements, int argc, char**argc)
{
   switch(NumberOfElements) {
   case 12: ComplicatedCode<12>::run(argc,argv); break;
   case 16: ComplicatedCode<16>::run(argc,argv); break;
   default: throw std::invalid_argument();
   }
}

代码.cc:

#include "code.h"
template<int NumberOfElements>
void ComplicatedCode::run(int argc, char**argv)
{
  /* implementation details, depending on NumberOfElements */
}
template void ComplicatedCode<12>::run(int, char**);  // instantination for 12
template void ComplicatedCode<16>::run(int, char**);  // instantination for 16