编写函数的const和非const变体

时间:2017-03-30 20:30:45

标签: c function types return const

我实现了一个相当复杂的功能,但为了一个最小的例子,让我们坚持下去:

(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完成,但是有一个优雅的解决方案吗?

1 个答案:

答案 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);