2013-01-20 58 views
2

我有几个函数要共享我想要传递的常用参数,那么是否可以使用宏来避免我重复写出常用参数?是否可以在函数原型和定义中使用宏?

作为一个例子,下面的工作会是什么?

#define STD_ARGS arg1, int arg2, int arg3 

foo(int STD_ARGS, int foo_arg1, int foo_arg2); 
foo(int STD_ARGS, int foo_arg1, int foo_arg2) { 
    ... 
} 
+0

更好地将'int'吸收到你的'STD_ARGS'中,以免后来有人错误地指出'STD_ARGS'命名为_one_参数。如果你绝对必须这样做。在你的编辑器中复制和粘贴不能太昂贵... – vonbrand

回答

2

当然,这是合法的。 #define -d宏的扩展只不过是代用符号的替代,忽略了这些代币的含义(如果有的话)。

(这是否是一个好主意或不取决于它如何有据可查的,在多大程度上使用利差,以及诸如此类的东西。)

+0

如果我有函数原型是一个单独的头文件,那么'#define'必须出现在头文件中?由于头文件与其他C文件共享,理想情况下,我想尽可能保持定义为本地。 – mchen

+1

是的,如果宏在头文件中使用,它应该在头文件中定义。然后你可以在同一个头文件中“#undef”,以防止头文件的用户意外地滥用它。 – aschepler

+0

所以我不得不''定义'同一个宏两次(一次在头文件中[然后用'#undef']取消并再次在源文件中)?我担心这可能会导致不一致的代码,如果我更改源中的宏定义但忘记更改副标题/反之。 – mchen

1

是它的工作原理。 宏的工作正是它取代STD_ARGSarg1, int arg2, int arg3。编辑前的 。所以,这是合法的。

相关问题