为什么此代码一开始需要分号

时间:2018-11-27 17:29:36

标签: c

我知道我在指令末尾需要分号, 但是当我尝试编译时,它要求我在我不知道为什么的地方使用分号,并且它可以工作,但现在的问题是,为什么我需要在while循环的开始和结束括号之前使用分号

#include <unistd.h>

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

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

#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);
}

我正在Windows 10 Visual Studio代码上运行。

2 个答案:

答案 0 :(得分:7)

您只是忘记了上一行的分号,而是将其放在下一行的开头进行了修复。

C实际上并不关心分号在哪里,只要它们位于语句之间即可。不管新行在哪里:

您的代码在这里

#include <unistd.h>

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

相同
#include <unistd.h>

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

,也与以下相同:

#include <unistd.h>

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

答案 1 :(得分:2)

您的代码没有错,但是格式非常不正常。通常,您将换行符放在;之后,而不是之前。

您的代码应如下所示:

#include <unistd.h>

int main()
{
    char a = 'a';

    while (a <= 'z')
    {
        write(1, &a, 1);
        a++;
    }    
    return 0;
}

顺便说一句:您不应该像在这里return (0);那样将返回值放在()之间,而应该只写return 0;。 put()没错,但是不必要的使它看起来像一个函数调用。

对于C程序来说,换行符不是必需的,您可以编写它并编译:

#include <unistd.h>
int main() {char a = 'a';while (a <= 'z'){
write(1, &a, 1);a++;} return 0;}

此代码段,我之前的代码段和您的代码段是等效的。