アプリ版:「スタンプのみでお礼する」機能のリリースについて

cygwinのgccで正常にコンパイルできない。

cygwinのvimで、以下のプログラムを書きました。

-------------------------------------------------------------
#include <stdio.h>

int main(void)
{
int no;

printf("Please input something:");
scanf("%d", &no);

printf("It is %d that you input it:\n", no);

return (0);
}
-------------------------------------------------------------

それからgccでコンパイルしました。
コマンドは以下の通りです。

$ gcc test.c

すると以下のエラーが出ました。

test.c:10:9: warning: unknown escape sequence: '\033'

このようにコンパイルできない状態です。
どのようにすると正常にコンパイルできるようになるでしょうか?

A 回答 (7件)

補足です。

エディタはvimって書いてありましたね。
でしたら、次のように打ってから保存してください。
行頭の「:」からです。
:set fileencoding=cp932
うまく動かないようなら、CygwinのSetupでlibiconvがインストールされてるか確認してみてください

参考URL:http://www.kawaz.jp/pukiwiki/?vim
    • good
    • 0
この回答へのお礼

返事が遅れて申し訳ありません。

ありがとうございます。
おかげさまで解決しました。
vimrcの"set fileencoding"の項目をcp932にすることで解決しました。

お礼日時:2010/01/04 23:46

test.c:10:9: warning: unknown escape sequence: '\033'



って、全角スペースで段落ち記述していませんか?
ソースの空白は、半角スペースか tabでなければなりませんよ。

この回答への補足

返事が遅れて申し訳ありません。

段落ち記述はありませんでした。

補足日時:2010/01/04 23:48
    • good
    • 0

どっかに制御コードが入った、などは、テキストを見ただけでは見つけにくと思います。


そういうときは、バイナリとしてどうなってるかをダンプするとわかりやすいです。
#2さんの言う通り、Cygwin(やその他unix系)ではodというコマンドを使います。
-c オプションを付けると、テキストとみなせる箇所はその文字として表示しますので、今回のようなテキストファイルのおかしい箇所を探すのに有効です。
実行方法は「od -c ファイル名」

さて、今回の場合ですが、実行結果から、\がおかしいらしいことがわかります。
で、円記号/バックスラッシュ、\033(ESC)、JとB、というキーワードでピンときたのですが....od -cでの円記号の周辺が
033 ( J \ 033 ( B
こんな感じになってませんか?

文字コードには、円記号とバックスラッシュとを分けているものと、同一のコードでどちらか一方だけを使っているものがあります。
unicodeや西欧用のISO-8859-1等は前者です。 0x5cがバックスラッシュ, 0xa5が円記号です
JISやShift-JISは後者で0x5cに円記号を使っています。
ASCIIは後者で0x5cにバックスラッシュを使っています。

前者を扱えるエディタでは、円記号とバックラッシュが混在したテキストを書くことができます。

では、そんなテキストを、区別のない文字コードで保存しようとしたときどうするか?
1)元の使い分けが崩れるのに目を瞑って、保存する文字コードに統一にする
円記号とバックスラッシュは共に0x5cになります。

2)元の使い分けをなるべく保存するように工夫する
その方法として、円記号は「JISの0x5c」バックスラッシュは「ASCIIの0x5c」と表現する、というのがあります。

そこで、参考URLのISO-2202-JPのところを見ると
ESC ( J は「以降はJISローマ字として解釈する」
ESC ( B は「以降はASCIIとして解釈する」
という意味だとわかります。つまり、円記号を円記号として保存しようとした結果だということです。

対策ですが、Shift-JISかEUCで保存する、というのが簡単だと思います。

ところで、Cygwin上のエディタ使っててそんな風になった覚えがないのですが....どんなエディタ使ってます?

参考URL:http://mikeneko.creator.club.ne.jp/~lab/kcode/en …
    • good
    • 0

printf("It is %d that you input it:\n", no);



でのエラーだと思いますが、”\n”の前のコロンが問題なのでは・・・。ピリオドならば、そういうことがおきないような気がします。
それか、半角バックスラッシュ(Windowsだと使えない場合あり)(Linuxだと普通に使える、というか、こっちを使わなければならない)で書き換えてみてください。

この回答への補足

間違えてコロンにしてました。
しかしそこを直しても何も変化はありませんでした。

それと半角バックスラッシュを打とうとするとWindowsだと"\"になってしまいます。

補足日時:2009/12/26 00:13
    • good
    • 0

上のプログラムを実際にコンパイルしてみましたが、特にエラーは出なかったです。

ただ、そのエラー?にwarningってあると思いますが、あくまで警告なので、実行ファイルができていると思います。
lsコマンドで、a.outがあればコンパイルできているはずですから。
    • good
    • 0
この回答へのお礼

あ、確かにできてます。ありがとうございます。
しかし"\"にあたる部分が文字化けしているようです。
これを取ったら正常になったので、原因は"\"にあるのでしょうか。

"\"をつけてエラーが出た場合の実行結果:

$ ./a
Please input something:123
It is 123 that you input itJBn

"\"がなぜか"JB"になってます。

お礼日時:2009/12/25 02:34

od でがんばってさがす.

    • good
    • 0

当該行に全角文字(空白含む)がありませんか?

この回答への補足

念のためにもう一度打ち直してみましたが同じエラーが出ました。

補足日時:2009/12/22 21:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!