gpt4 book ai didi

C - 函数处理 const *

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:49 24 4
gpt4 key购买 nike

我有一个在 const * 中搜索内容的函数。并将这样一个 const * 返回给找到的元素。因此,该功能没有改变任何东西,我实际上想保持“常量”以提高可读性和可重用性。但是我有另一个函数,它只用 * 调用函数,然后使用返回值。但是在这个用例中,应该更改值。但是因为返回值是一个 const * 我不能那样做。我是否应该调整我的编程模式来避免这个问题?

const void* search_min_vector_element(const void* vector, size_t length, size_t element_size, int(*cmp_fnc) (const void*, const void*));

这是第一个函数。

void* min_element = search_min_vector_element((unsigned char*) vector + (i * element_size), length - i, element_size, cmp_fnc);

这是第二个调用。 vector 在这种情况下为 void*。正因为如此,我想修改它。感谢您的帮助。

最佳答案

您可以根据参数的类型选择要执行的函数。编写一个 _Generic 宏来选择允许的类型,然后根据它调用适当的函数。示例:

#include <stdio.h>

char* print_str (char* str)
{
printf("%s\n", str);
return str;
}

const char* print_str_const (const char* str)
{
printf("const %s\n", str);
return str;
}

#define print(str) \
_Generic((str), \
const char*: print_str_const, \
char*: print_str) (str)


int main(void)
{
const char* cstr = "hello";
char* str = "world";

cstr = print(cstr); // ok
str = print(str); // ok
cstr = print(str); // ok
//str = print(cstr); // compiler error, incorrect assignment
//str = print((void*)str); // compiler error, wrong type
}

关于C - 函数处理 const *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460173/

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