我目前正在开发一个function
inC
来查找char
给定字符串的最后一次出现。如果没有给出字符串的长度,我希望它使用某种方法(我自己的),否则它只会使用strrchr
. 因此,经过一番研究后,我决定 amacro
将是要走的路。这就是我所拥有的:
size_t strlchr(const char *str, const char ch, const int strln)
{
//function code if strlen == -1 (no parameter)
//function code if strlen != -1 (parameter given)
}
#define strlchr_arg2(str, ch) strlchr(str, ch, -1)
#define strlchr_arg3(str, ch, strlen) strlchr(str, ch, strln)
#define getarg4(arg2, arg3, arg4...) arg4
#define strlchr_macro(...) \ getarg4(__VA_ARGS__, strlchr(arg3, \ arg2, )
#define strlchr(...) strlchr_macro(__VA_ARGS__)(__VA_ARGS__)
这是实现我的目标的正确方法吗?或者有没有更有效的方法?我还必须在源文件中的宏之前有功能代码吗?我通常将我的函数写在底部,并有我的声明,在这种情况下size_t strlchr(const char*, const char, const int)
朝向我的源文件的顶部,最后是我的宏等在我的源文件的顶部。所以理想情况下我的布局是:
macros/defines
function declaration
function code
这个问题完全基于我在网上看到的其他示例。这是使用可选函数参数的方式吗?还是我走远了?我还没有实现它,因为我首先想在做一些可怕的错误之前得到一些输入(我以前从未制作过宏,这个宏大部分来自一个例子,我对它到底是什么知之甚少做)。