G CC скомпилируется, но лязг не будет - PullRequest
0 голосов
/ 10 января 2020

Итак, в моих финалах было упражнение, спрашивающее, что напечатает программа.

Это код:

#include <stdio.h>

int main (){
    int x=5, y=4;

    if (x>y);
      printf("A");

    if(x=4)
      printf("%d",x+y);

     return 0;
}

Когда я пытаюсь скомпилировать его с помощью gcc -ansi -pedantic -Werror на Машина Debian, она прекрасно компилируется и выдает «A8».

Однако, когда я пытаюсь скомпилировать ее, используя clang -ansi -pedantic -Werror, я получаю ошибки, касающиеся выражения if (x=4), отсутствующего = и пропущенного оператора if(x>y);.

Почему это происходит, и какой ответ можно пометить как правильный?

1 Ответ

2 голосов
/ 10 января 2020

компиляторы могут выдавать разные предупреждения. Например, clang предупреждает о пустом операторе, а gcc - нет.

Поэтому, если вы установите -Werror, он будет компилироваться с использованием g cc, но не будет компилироваться с использованием clang.

Кстати, что мешает вам читать сообщения компилятора. Они говорят сами за себя. Это даже показывает, как это исправить.

#1 with x86-64 clang 9.0.0
<source>:6:9: error: if statement has empty body [-Werror,-Wempty-body]

if (x>y);

        ^

<source>:6:9: note: put the semicolon on a separate line to silence this warning

<source>:8:5: error: using the result of an assignment as a condition without parentheses [-Werror,-Wparentheses]

if(x=4)

   ~^~

<source>:8:5: note: place parentheses around the assignment to silence this warning

if(x=4)

    ^

   (  )

<source>:8:5: note: use '==' to turn this assignment into an equality comparison

if(x=4)

    ^

    ==

<source>:12:2: error: no newline at end of file [-Werror,-Wnewline-eof]

}

 ^

3 errors generated.

Compiler returned: 1
...