2017-05-03 6 views
0

私はビット演算子 'または'(¦)(非常に単純な、私が知っている)でCでコーディングしようとしています。私はGCCでコンパイルするとき はしかし、私が取得:gccで破線(|)を使用するには?

error: stray \302 and stray \246 

私はこの問題の解決策を探してみました、そして私が見たものすべてが、コンパイラがシンボルを認識しない場合にこのエラーが発生したということでした。 私はそれを動作させるために何ができますか?

私のコードは次のとおりです。ここ

#include "stdio.h" 

int main(int argc, char const *argv[]) { 
    int x, y , z; 
    x = 0xffff; 
    y = 0x8888; 
    z = x ¦ y; 
    printf("0x%u \n", z); 
    return 0; 
} 

は、端末上のエラーです:

ex_8_4.c: In function ‘main’: 
ex_8_4.c:19:3: error: stray ‘\302’ in program 
    z = x ¦ y; 
^
ex_8_4.c:19:3: error: stray ‘\246’ in program 
ex_8_4.c:19:12: error: expected ‘;’ before ‘y’ 
    z = x ¦ y; 
      ^

は明らかに私が間違っている記号を使用(|の代わりに|を)(それが表示されています方法です何らかの理由本では新しい)それは働いている。どうもありがとう。

+2

ようになります。それを再入力します。 –

+1

パイプの '|'文字を使うべきです。 – RoiHatam

+1

あなたの端末のイメージをリンクするのではなく、エラーメッセージを切り取り、あなたの質問に直接貼り付けてください。 –

答えて

3

文字¦が正しいビット単位のOR演算子ではありません。キーボードで|を検索してください。 このコードは私のマシンで|でコンパイルされます。

#include "stdio.h" 
int main(int argc, char const *argv[]) { 
    int x, y , z; 
    x = 0xffff; 
    y = 0x8888; 
    z = x | y; 
    printf("0x%u \n",z); 
    return 0; 
} 
1

あなたは間違った文字を使用しています。 あなたが使用する必要があります。|

だから、あなたのコードは次のようになります。

#include "stdio.h" 

int main(int argc, char const *argv[]) 
{ 
    int x, y, z; 
    x = 0xffff; 
    y = 0x8888; 
    z = x | y; 
    printf("0x%u \n", z); 
    return 0; 
} 
+0

また、ヘッダを ''に変更し、 'main()'パラメータを削除します(使用されていないので)。 – pmg

+0

@pmg: 'main'の署名は問題ありません。空の引数リストは廃止機能です。引数を使用しない場合、 'int main(void)'を使うべきです。 – Olaf

+0

パラメータリストとしてvoidを追加することは、私が言いたいことです。 – pmg

1

あなたが適切な文字(¦|)を見つけることができない場合は、trigraph??!を使用しています。 `|

あなたのラインは、それが`と同じ文字ではありません。この

z = x ??! y; 
+0

トリグラフは絶望の尺度です。特に、 '-trigraphs'を使ってGCCで明示的に有効にしなければならないからです(' -Wno-trigraphs'も必要かもしれません)。 –

+0

@JonathanLeffler:私のGCC(バージョン4.9.2)は '-std = c89 -pedantic'できれいにコンパイルします。 – pmg

+0

'-Wall'を追加すると、警告が出ると思います。 GCC 7.1.0を使う: 'gcc -std = c11 -pedantic -Wall -Werror -c cox.c'は次のようになります: ' cox.c:3:1:エラー:trigraph ?? = [-Werror = trigraphs ] 'と ' ?? = include 'となります。バージョン5.2.0と6.1.0も同様です。 '-Wall'がなければ、彼らは三方グラフについて心配していません。 (私はこのマシンにGCC 4.xを持っていません。) '-Wall'(または' -Werror'や '-Wextra')なしではコンパイルしません。 –

関連する問題