周围使用C预处理器有点打后,我想了个办法有类似于控制结构的Pythonian的东西,像这样定义:定义一个类似于Python“with”语句的C宏有什么缺点?
#define with(var) for(int i##__LINE__=0;i##__LINE__<1;)for(var;i##__LINE__<1;++i##__LINE__)
使用范例:
#include <cstdio>
#include "FileClass.hpp"
#include "with.hpp"
int main(){
with(FileClass file("test.txt")){
printf("%s\n",file.readlines().c_str());}
return 0;}
的想法是一个双重嵌套的for循环有一个外部混淆迭代变量,它在内部循环中增加一次以打破它。这会导致以下代码在其范围内使用var执行一次。
这是否有任何缺点?如果我足够混淆迭代变量,那么几乎没有发生名称冲突的机会,它仅使用标准预处理器功能,但似乎没有任何回火的可能性,并且很容易理解。
它几乎看起来太好了,是不是真的 - 有什么理由,这是不是在任何地方都使用?
如果您想编写Python,请这样做。 – Xeo 2011-12-17 03:26:45
每个人都在努力完全消除对预处理器的需求,并且您正在尝试广泛地使用它,做得好:)(我想我在Obfuscated C比赛中看到了类似的东西。) – ScarletAmaranth 2011-12-17 03:29:18