const char的strlen是否已优化?

And*_*eas 1 c string optimization strlen

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

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

它取决于优化级别吗?

unw*_*ind 16

我认为你不能依靠优化发生.

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

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

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

void send_str(const char *data)
{
  while(*data != '\0')
    send_byte(*data++);
}
Run Code Online (Sandbox Code Playgroud)

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