我实现了一个相当复杂的功能,但为了一个最小的例子,让我们坚持下去:
(const) char * my_function((const) char *input) {
return input;
}
当我需要使用const调用函数一次并使用非const值调用一次时出现问题:
const char *a = "ABC";
char b[3];
// The following fails without using const in the declaration of my_function
const char *result_a = my_function(a);
// The following fails when using const in the declaration of my_function
char *result_b = my_function(b);
可以在普通C中解决这个问题而不用不同名称重复相同的功能吗?
我知道这可以用第二个文件或非常长的#define
完成,但是有一个优雅的解决方案吗?
答案 0 :(得分:0)
如果函数中没有更改参数指向的字符串,那么函数定义可能看起来像
char * my_function( const char *input )
{
// ...
return ( char * )input;
}
因此你可以写
const char *a = "ABC";
char b[3];
const char *result_a = my_function(a);
char *result_b = my_function(b);
这是函数用户有责任正确处理返回的对象。
此方法用于大多数标准C字符串函数。
例如
char *strstr(const char *s1, const char *s2);