c - const char* 的 strlen 是否经过优化?

标签 c string optimization strlen

我可以在这样的循环中使用 const char*strlen 并期望 O(n) 时间复杂度,还是会导致 O(n^2 )?我认为它看起来比对字符串长度使用变量更简洁。

void send_str( const char* data ) {
    for (uint8_t i = 0; i < strlen(data); i++)
        send_byte( data[i] );
}

是否取决于优化级别?

最佳答案

我认为您永远不能依赖优化的发生。

如果你真的想避免一个额外的变量,为什么不这样做:

void send_str(const char *data)
{
  for(size_t i = strlen(data); i != 0; --i)
    send_byte(*data++);
}

或者,不那么傻,更像是一个实际的生产质量 C 程序:

void send_str(const char *data)
{
  while(*data != '\0')
    send_byte(*data++);
}

遍历字符两次完全没有意义,所以根本不要调用 strlen(),自己检测字符串结尾。

关于c - const char* 的 strlen 是否经过优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545577/

相关文章:

javascript - Chrome的V8不会因为 "tagged-to-i: not a heap number"而优化功能

python - 多个数组中所有可能的精确总和

c - strcat_s() 是否需要使用 realloc()?

C代码;带输入的嵌套 do while 循环

iphone - 匹配 NSString 中单词的开头

c++ - 如何将 vector 转换为特定类型的字符串

c# - 在 C# 中将 float 保存到二进制文件并在 C 中打开

c - 了解#pragma acc 内核

c - 在数组中传递字符串

ios - 优化:什么是 sidetable_release() 和 sidetable_retain()?