void reverse_string(char* string, int str_size) {
char tmp;
int i = 0;
int j = str_size - 1;
while (i < j) {
tmp = string[i];
string[i] = string[j];
string[j] = tmp;
++i;
--j;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这个函数是可重入的,因为它不使用任何全局变量.它只修改参数.
我的问题是:这个函数是可重入的吗?如果是的话,我的论点是否足够好?
提前致谢
Ada*_*ght 14
是的,这是一个可重入的功能.可重入函数被定义为在它们自己执行时可以被调用的函数(由于递归或并发).在这种情况下,递归是没有意义的,并且您同时是安全的(假设参数不同).
你的论点很好 - 没有明确或隐含地访问全局或共享状态,因此确保了重入.这是您的显式代码和C的语义的组合.其他语言和API 可能没有此属性.
编辑:在仔细检查时,ISO C标准似乎不会强制strlen的线程安全.因此,您很可能使用具有非线程安全strlen的C标准库,因此,继承了它的非重入性.