[英]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[] = {.....};
如何使用枚舉實現呢?
我想您的經理要求您將宏映射到枚舉類型。 您可以簡單地定義一個枚舉類型,只要所有宏都具有整數值,並且枚舉值不使用與宏相同的名稱即可。
這有什么好處?
通常不建議使用宏,因為在進入編譯器之前將其替換為值,與使用由編譯器檢查和管理的枚舉類型相比,它容易出錯。
這些宏正在許多不同的文件中使用。 如果定義了枚舉類型,是否需要更改任何內容?
不幸的是。 但是,如果宏被隔離在中央頭文件中,則可以通過重命名宏並將原始名稱命名為枚舉值來解決。
您可能會發現本文很有用。 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.