stray在C中查找错误

Ash*_*wat 0 c

我不知道为什么这个语法错误出现在这个程序中.

#include <stdio.h>
#include <stdbool.h>

#define N 30

int main(void) {
    char sieve[N], *sp;
    int number;
    for(sp = sieve; sp < sieve + N;)
        *sp++ = true;          

    for(number = 3;; number += 2) {
        sp = sieve + (number – 3)/2;
        if(sp >= sieve + N)
            break;
        while(sp += number, sp < sieve + N)
            *sp = false;
    }

    printf("2\n");
    for(number = 3, sp = sieve; sp < sieve + N; number += 2, sp++) {
        if(*sp)
            printf("%d\n", number);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它出现在第13行: sp = sieve + (number - 3)/2;

error: stray '\342' in program
error: stray '\200' in program
error: stray '\223' in program
error: expected '>' before numeric constant.
Run Code Online (Sandbox Code Playgroud)

我也试过了另一个编译器,我也试过这种方式, sp = sieve + ((number - 3)/2);但没有任何反应.

jpw*_*jpw 8

第13行上减号的字符根本不是减号,而是连字符(我认为这就是所谓的).

 sp = sieve + (number – 3)/2;
Run Code Online (Sandbox Code Playgroud)

应该

 sp = sieve + (number - 3)/2;
Run Code Online (Sandbox Code Playgroud)

当我更改该字符时,代码会编译.

  • 是的,em-dash.这是一个很好的迹象,他从维基百科复制并粘贴了他的代码:0 (3认同)