C/C++宏扩展与代码生成

前端之家收集整理的这篇文章主要介绍了C/C++宏扩展与代码生成前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
宏扩展和扩展代码生成有优点和缺点利弊.你最喜欢的方法是什么?为什么?我们何时应该选择其中一个?请劝告.谢谢!

宏观扩张可以非常方便.有所帮助:
http://dtemplatelib.sourceforge.net/table.htm

VS

代码生成为您提供了大量优秀的代码
http://code.google.com/p/protobuf/
http://incubator.apache.org/thrift/

解决方法

这是一个权衡.让我举个例子.我在1985年左右偶然发现了 differential execution的技术,我认为它是用于编程用户界面的非常好的工具.基本上,它需要这样简单的结构化程序:
void Foo(..args..){
  x = y;
  if (..some test..){
    Bar(arg1,...)
  }
  while(..another test..){
    ...
  }
  ...
}

和控制结构的混乱像这样:

void deFoo(..args..){
  if (mode & 1){x = y;}
  {int svmode = mode; if (deIf(..some test..)){
    deBar(((mode & 1) arg1 : 0),...)
  } mode = svmode;}
  {int svmode = mode; while(deIf(..another test..)){
    ...
  } mode = svmode;}
  ...
}

现在,一个非常好的方法就是为C编写解析器或基本语言,然后遍历解析树,生成我想要的代码. (当我在Lisp中做到这一点时,那部分很简单.)

但谁想为C,C或其他什么编写解析器呢?

所以,相反,我只是编写宏,以便我可以编写如下代码

void deFoo(..args..){
  PROTECT(x = y);
  IF(..some test..)
    deBar(PROTECT(arg1),...)
  END
  WHILE(..another test..)
    ...
  END
  ...
}

但是,当我在C#中执行此操作时,有人在他们的智慧决定宏是坏的,我不想编写C#解析器,所以我必须手动执行代码生成.这是一种皇室般的痛苦,但与通常编码这些东西的方式相比,它仍然值得.

猜你在找的C&C++相关文章