gpt4 book ai didi

在 C 中将宏转换为枚举类型

转载 作者:行者123 更新时间:2023-11-30 16:59:00 27 4
gpt4 key购买 nike

我有点困惑。在我们的生产环境中,已经定义的宏很少。这些宏用于返回一些值。现在我们的要求是根据这些宏的值准备一些查找。我创建了 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;
}

关于在 C 中将宏转换为枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38448324/

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