gpt4 book ai didi

c - 可选功能参数 C

转载 作者:行者123 更新时间:2023-12-02 00:18:11 25 4
gpt4 key购买 nike

我目前正在用 C 开发一个 function 来查找给定字符串的最后一个 char 出现。如果没有给出字符串的长度,我希望它使用某种方法(我自己的),否则它只会使用 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

这个问题完全基于我从网上看到的其他例子。这就是使用可选函数参数的方式吗?还是我离题了?我还没有实现它,因为我想在做一些可怕的错误之前先得到一些输入(我以前从未制作过宏,这个宏大部分是从一个例子中提取的,我对它到底是什么知之甚少确实)。

最佳答案

看起来这样做会更简单:

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_macro(STR, CH, STRLN, ...) strlchr(STR, CH, STRLN)
#define strlchr(...) strlchr_macro(__VA_ARGS__, -1, -1)

这使得 chstrln 参数都是可选的,如果没有提供则默认为 -1。它还允许您提供超过 3 个参数(多余的将被忽略),这可能是不受欢迎的,但可能不会成为阻碍。

关于c - 可选功能参数 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12181291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com