c - for(;...) 或 while(...) 流量控制?

标签 c for-loop while-loop

从任何方面来说,1 或 2 哪一个更好(无论什么可以被认为更好)?它们完全一样吗?

void method1(char **var1) {

  //the last element of var1 is NULL

  char **var2 = var1;
  int count = 0;

  //1
  for (; *var2; (*var2)++, count++);

  //2
  while(*var2) {
    (*var2)++;
    count++;
  }
}

最佳答案

您可以使用编译器检查不同优化级别的 asm 输出...或者只是不担心语义上相同的内容...

...

LBB0_1:                                 ## =>This Inner Loop Header: Depth=1
    movq    -16(%rbp), %rax
    cmpq    $0, (%rax)
    je  LBB0_4
## BB#2:                                ##   in Loop: Header=BB0_1 Depth=1
    jmp LBB0_3
LBB0_3:                                 ##   in Loop: Header=BB0_1 Depth=1
    movq    -16(%rbp), %rax
    movq    (%rax), %rcx
    addq    $1, %rcx
    movq    %rcx, (%rax)
    movl    -20(%rbp), %edx
    addl    $1, %edx
    movl    %edx, -20(%rbp)
    jmp LBB0_1
LBB0_4:
    ...


.subsections_via_symbols

方法2:

...

LBB0_1:                                 ## =>This Inner Loop Header: Depth=1
    movq    -16(%rbp), %rax
    cmpq    $0, (%rax)
    je  LBB0_3
## BB#2:                                ##   in Loop: Header=BB0_1 Depth=1
    movq    -16(%rbp), %rax
    movq    (%rax), %rcx
    addq    $1, %rcx
    movq    %rcx, (%rax)
    movl    -20(%rbp), %edx
    addl    $1, %edx
    movl    %edx, -20(%rbp)
    jmp LBB0_1
LBB0_3:
    ...


.subsections_via_symbols

关于c - for(;...) 或 while(...) 流量控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25834084/

相关文章:

python - 如何检查一个值是否匹配一个txt文件

php - 对 while 循环中的每个 X 项目做一些事情

捕获从 netcat 发送的 EOF

r - 使用 R 替代具有 "dynamic"变量的 for 循环

c - 错误: Segmentation fault using fopen and open

PHP 嵌套 for 循环

while-loop - 为什么不在 Fortran 中使用 DO WHILE

java - 根据参数设置 boolean 条件

c - 在我调用函数来扫描某些内容后,我的程序无法继续运行?有人能找出问题所在吗? (很长,但请帮忙!)

c - 什么时候会使用 malloc 而不是 zmalloc?