使用C11预处理器封装功能

时间:2017-01-10 06:13:57

标签: c insert c-preprocessor

我目前正在研究C中的一个项目,其中有各种功能需要封装在两个其他功能之间。原理上,它看起来像这样:

int func1(int arg) {
  prepare();
  doStuff();
  undo();
  return stuff;
}
char func2(int arg1, char* arg2) {
  prepare();
  doOtherStuff();
  undo();
  return results;
}

我听说预处理器非常强大,所以可以使用一些预处理器mumbo-jumbo在实际函数体之前和之后插入prepare()undo()函数吗?我知道强烈建议不要使用预处理器,如果可以避免,但我仍然很好奇它是否可能。

干杯。

2 个答案:

答案 0 :(得分:1)

你去了:

#define MY_MACRO(doStuff) \
{                         \
    prepare();            \
    doStuff               \
    undo();               \
}

答案 1 :(得分:1)

只是为了记录,另一种方法是设置某种形式的函数指针模板系统:

typedef void stuff_t (void*);

void execute (stuff_t* stuff, void* result)
{
  prepare();  
  stuff(result);
  undo();
}

int func1(int arg) {
  int result;
  execute(do_stuff, &result);
  return result;
}

char func2(int arg1, char* arg2) {
  char result;
  execute(doOtherStuff, &result);
  return result;
}

这是否是一个好主意取决于代码实际应该做什么以及代码重用性有哪些要求。