获取消息的动态定义

Posted

技术标签:

【中文标题】获取消息的动态定义【英文标题】:Get defines dynamically for messages 【发布时间】:2015-01-27 16:31:49 【问题描述】:

在下面的代码中,我想为我的 errors_manager 函数使用预定义的消息,以及宏 CALL_MSG()。 但是当我使用变量时,我无法获取变量的内容!

错误 = ILLOPS = 1;
CALL_MSG(错误)
错误:“MSG_err”未声明(在此函数中首次使用)

但是当我使用一个可以完美工作的整数时:/

ft_putstr(CALL_MSG(err));
print: 非法选项 -- 

如何为我的消息创建一个类似的系统(如果可能,使用定义和枚举)

错误.h

#ifndef 错误_H # 定义 ERRORS_H # 定义 CALL_MSG(var) MSG_ ## var # 定义 MSG_1 "非法选项 --" 枚举 e_errors 不是, ILLOPS = 1, ILLOPS_QUIT = 1, 发现 ; typedef 枚举 e_errors t_errors; #endif

main.c

void err_manager(int errnum, t_errors err) ft_putstr("\033[91mls:"); 如果(错误!= 0) ft_putstr(CALL_MSG(err)); 如果(错误号!= 0) ft_putendl(strerror(errno)); ft_putstr("\033[0m"); 错误数字 = 错误数字; 返回 ; int main(int ac, char **av, char **env) printf("Vous avez %d 个参数\n", ac - 1); printf("密码: %s\n", get_pwd(env)); printf("面具价值:%08x\n", mask_creator(ac, av));

谢谢!

【问题讨论】:

【参考方案1】:

您不能对宏和变量执行此操作。宏在代码进入编译器之前由预处理器扩展;当变量获得它们的值时,它们在运行时不存在。

您可以做的是将字符串保持为运行时可访问的方式,例如数组:

errors.h

char const *call_msg(t_errors err);

errors.c

char const *call_msg(t_errors err) 
  static char const *const messages[] = 
    "success -- ", // or whatever NOT is supposed to mean
    "illegal option -- ",
    "not found -- ",
    ...
  ;

  check_if_err_is_within_array_bounds(err); // exercise for the reader

  return messages[err];

ma​​in.c

ft_putstr(call_msg(err));

【讨论】:

以上是关于获取消息的动态定义的主要内容,如果未能解决你的问题,请参考以下文章

获取窗口句柄,并向窗口发送自定义消息

如何从自定义列表视图中获取选定项目并在 toast 消息中打印?

iOS-如何使用自定义参数firebase获取动态短链接

根据 SQL 中的动态 ID 获取自定义产品选择

java基础-常见面试题

将表格单元格数据获取到 UI 按钮操作中?