Skip to content

Latest commit

 

History

History
56 lines (41 loc) · 1.35 KB

bug602.md

File metadata and controls

56 lines (41 loc) · 1.35 KB

注释使用

找Bug

#include <stdio.h>

int quotient(int *q, int *p)
{
	if(*p) return *q/*p  /* compute ratio */ ;
	else return *q;
}

int main()
{
    int n = 20, m = 4;
    int q = quotient( &n, &m );
    printf( "%d/%d == %d\n", n, m, q );
    return 0;
}

说明

问题分析:

代码 return *q/*p /* compute ratio */ ; 中,注释符号 /* 与除法运算符 / 和指针解引用 * 的组合导致了问题。

实际执行:

  • 编译器将 *q/*p 解析为 *q / *p(两个指针解引用的除法)
  • 但是 /* 被识别为注释开始符号
  • 因此 *q/*p 实际上变成了 *q,后面的 /*p /* compute ratio */ 被当作注释忽略了

正确的写法:

// 方法1:在除号和注释之间加空格
if(*p) return *q / *p;  // compute ratio

// 方法2:使用单行注释
if(*p) return *q / *p;  // compute ratio

// 方法3:使用括号明确分隔
if(*p) return (*q) / (*p);  /* compute ratio */

要点:

  • 注释语法:/* */ 是块注释,// 是行注释
  • 词法分析:编译器在词法分析阶段识别注释,可能影响代码解析
  • 最佳实践:在运算符和注释之间使用空格,或使用单行注释
  • 代码可读性:清晰的代码布局可以避免这类问题