共享库函数参数从char*改为char const*是否安全?
共享库函数参数修改的安全性与链接问题
修改是否安全?
这个修改是完全安全的。原因如下:
char const*是char*的兼容类型,原本传入char*的调用代码,现在传递给char const*属于合法的隐式转换,不会触发编译或运行时错误;- 函数实现本身不会修改传入的字符串,添加
const只是明确了这个已有的语义,和实际行为完全匹配,不会引入任何逻辑问题。
是否需要重新链接应用?
不需要重新链接,直接替换.so文件即可。因为C语言的符号命名规则中,函数参数的const限定符不会影响符号名称——int some_function(char*)和int some_function(char const*)在共享库的符号表中是同一个名字。应用程序调用该函数时的符号引用和修改后的库完全匹配,动态加载时能正常完成绑定,无需重新编译或链接应用。
内容的提问来源于stack exchange,提问作者Åsmund
相关产品推荐
相关产品推荐

