簡體   English   中英

在C中將宏轉換為枚舉類型

[英]Converting macros to enum types in C

我有點困惑。 在我們的生產環境中,已經定義了很少的宏。 這些宏用於返回一些值。 現在,我們的要求是根據這些宏的值准備一些查找。 我創建了char *數組,並在適當的索引處定義了一些字符串。 但是我的經理要求我將這些宏轉換為枚舉類型,然后進行查找。 如何使用枚舉實現呢? 這有什么好處? 這些宏正在許多不同的文件中使用。 如果定義了枚舉類型,是否需要更改任何內容? 提前致謝 !

樣例代碼:

#define macro_1 1
#define macro_2 2
#define macro_3 3
#define macro_4 4

抬頭:

const char* lookup[] = {.....};
  1. 如何使用枚舉實現呢?
    我想您的經理要求您將宏映射到枚舉類型。 您可以簡單地定義一個枚舉類型,只要所有宏都具有整數值,並且枚舉值不使用與宏相同的名稱即可。

  2. 這有什么好處?
    通常不建議使用宏,因為在進入編譯器之前將其替換為值,與使用由編譯器檢查和管理的枚舉類型相比,它容易出錯。

  3. 這些宏正在許多不同的文件中使用。 如果定義了枚舉類型,是否需要更改任何內容?
    不幸的是。 但是,如果宏被隔離在中央頭文件中,則可以通過重命名宏並將原始名稱命名為枚舉值來解決。

您可能會發現本文很有用。 http://www.cs.utah.edu/~germain/PPS/Topics/C_Language/enumerated_types.html

一些代碼

#include <stdio.h>

#define old_macro_1 1
#define old_macro_2 2
#define old_macro_3 3

enum MacroValues {
  macro_1 = old_macro_1,
  macro_2 = old_macro_2,
  macro_3 = old_macro_3
};

void test_macros(void)
{
  const char* lookup[] = {"M0", "M1", "M2", "M3"};
  // use an enum variable directly
  printf("enum MacrosValues %d\n", macro_1);
  // define an enum variable to use as index
  enum MacroValues m1 = macro_2;
  printf("lookup[%d] = %s\n", m1, lookup[m1]);
}

int main(void)
{
  test_macros();
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM