我目前正在开发一个用于查找给定字符串中最后一个字符出现的C语言函数
。如果没有给定字符串的长度,我希望它使用一种特定的方法(我的方法),否则它将只是使用strrchr
。经过一番研究后,我决定使用宏定义
。这就是我写的代码:
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
这个问题完全基于我在网上看到的其他示例。这是使用可选函数参数的方法吗?还是我完全错了?我尚未实现它,因为我想先得到一些输入,以免做错事情(我以前从未制作过宏,而且这个宏大部分是从一个示例中获取的,我对它的理解很少)。
strlchr
中使用strlen
,那么将该名称用作参数是没有问题的。不过我自己不会这样做。 - Shahbaz