你如何优化这个?

Jac*_*ack 0 c optimization if-statement

我有这样的结构:

static struct F_t {
  char *_1;
  char *_2;
  char *_3;
  char *_4;
  char *_5;
  char *_6;
  char *_7;
  char *_8;
  char *_9;
  char *_10;
  char *_11;
  char *_12;
} F = { 0 };
Run Code Online (Sandbox Code Playgroud)

根据stdin的一些值,它设置得当.

"问题"是我从字符串中检索它,我需要正确设置它.我目前正在使用此功能:

static inline void 
setf(int i, char *value)
{
  /* Nothing to do. */
  if(i > 12)
    return;

  if(i == 1)
    F._1 = value;
  else if(i == 2)
    F._2 = value;
  else if(i == 3)
    F._3 = value;
  else if(i == 4)
    F._4 = value;
  else if(i == 5)
    F._5 = value;
  else if(i == 6)
    F._6 = value;
  else if(i == 7)
    F._7 = value;
  else if(i == 8)
    F._8 = value;
  else if(i == 9)
    F._9 = value;
  else if(i == 10)
    F._10 = value;
  else if(i == 11)
    F._11 = value;
  else if(i == 12)
    F._12 = value;
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用宏..但是因为它是在运行时设置的,所以不可能.我知道,如果没有反思,像这样的现代事物,等等.但也许有一些我不知道的东西.可能在C++中是可能的.但不是.我想要纯C.

任何建议都非常有意义.提前致谢.

Flo*_*ciu 5

你为什么不这样做:

static struct F_t {
    char ** _;
} F = { 0 };
Run Code Online (Sandbox Code Playgroud)

此时,只需确保malloc为大小为12的双数组(在您的情况下),然后您可以使用如下函数:

setf(int i, char *value)
{
     F._[i] = value;
}
Run Code Online (Sandbox Code Playgroud)

事情看起来好多了没有?

  • 我喜欢这个答案.但是为什么`malloc`当你可以用`char*_ [12]`在结构中声明一个12个指针的数组? (3认同)