为什么这段代码在开头需要分号

M C*_*M C -5 c

我知道在指令结束时我需要分号,但是当我尝试编译时,它会在我不知道原因的地方问我分号并且它有效但现在的问题是为什么我在开头需要分号一段时间循环和结束括号之前

#include <unistd.h>

int     main()
{
    char a = 'a'
    ;while (a <= 'z')
    {
        write(1, &a, 1);
        a++;
    }    
    return (0)
;}
Run Code Online (Sandbox Code Playgroud)

但我在这段代码中不需要分号(至少在此之前)

#include <unistd.h>

char    ft_putchar(char c)
{
    write(1, &c, 1);
}

char    rec(char a)
{
    if (a <= 'z')
    {
        ft_putchar(a);
        a++;
        rec(a);
    }
    return (0);
}

int     main()
{
    char a = 'a';
    rec(a);
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

我在Windows 10视觉工作室代码上运行.

Max*_*Max 7

你只是忘记了前一行末尾的分号,并通过将它放在下一行的开头来修复它.

C实际上并不关心你的分号在哪里,只要它们在语句之间; 它并不关心新线的位置:

你的代码在这里

#include <unistd.h>

int     main()
{
    char a = 'a'
    ;while (a <= 'z')
    {
        write(1, &a, 1);
        a++;
    }    
    return (0)
;}
Run Code Online (Sandbox Code Playgroud)

是相同的

#include <unistd.h>

int     main()
{
    char a = 'a';
    while (a <= 'z')
    {
        write(1, &a, 1);
        a++;
    }    
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

并且也是一样的:

#include <unistd.h>

int main() { char a = 'a'; while (a <= 'z') {write(1, &a, 1); a++; } return (0);}
Run Code Online (Sandbox Code Playgroud)