使用宏定义简化编码

时间:2013-12-31 01:05:36

标签: c macros

我试图想办法防止每次写typedef struct然后我发现我可以用这种方式使用宏定义来做:

#include <stdio.h>
#include <stdlib.h>
#define struct_t typedef struct

struct_t list {
    int id;
    struct list *next;
} list;

int main(void)
{
    list *element = (list *)malloc(sizeof(list));
    element->id = 7;
    element->next = NULL;

    printf("ID: %d\nNEXT: %p", element->id, element->next);
    return 0;
}

结构只是一个例子:整个思考是关于简化编码。

使用宏来简化编码是一种好习惯吗?或者它可能会导致一些问题?

除了使用maroc定义之外,还有什么方法可以简化编码吗?

2 个答案:

答案 0 :(得分:4)

虽然宏确实在简化繁琐,重复的编码任务中占有一席之地,但这并不是他们有用的地方之一:每struct节省六个字符,不会帮助你隐藏任何复杂性,同时为您的代码的读者引入可读性问题。

如果您希望保存一些输入,在这种情况下更好的方法可能是在您喜欢的IDE或代码编辑器中定义一个宏。

虽然制定决定使用宏的规则非常困难,但一般来说,在做出决定时应考虑以下几点:

  • 宏会简化一个复杂的代码块吗? - 如果答案为“否”,则不应为其创建宏。
  • 宏会为一小段代码提供一个好名字吗? - 宏可能是一个不错的选择。另一种选择可能是内联函数。
  • 您是否正在替换单一语言构造? - 如果答案为“是”,则应避免使用宏。

答案 1 :(得分:2)

使用宏来“隐藏”事物是不好的做法。对于所有阅读代码的人来说,应该非常清楚每个事物的内容。我的建议是仅将宏用于简单定义,例如......

#define MAX_NUM (10)

...或者在无法定义功能或更复杂的情况下。我想不出一个很好的例子,但也许这很难说明一个罕见的例外......

#define TRY(test)        if(test != 0)  \ 
                             goto fail; \
#define FAIL(fail_block) {              \
                             fail:      \
                             fail_block \
                         }              \