Novell(クラウドコンピューティングのセキュリティ・仮想化ソリューションを実現)

Shift_JIS文字を含むソースコードをgccでコンパイル後、警告メッセージが表示される

This document (00006574) is provided subject to the disclaimer at the end of this document.

問題点

gccコンパイルすると、警告メッセージ "warning: unknown escape sequence: '\203'" が出力され、実行すると一部文字化けされてしまいます。

再現手順:

<source.c>
#include <stdio.h>
int main()
{
 printf("カーソル\n");
 return 0;
}

上記のソースファイルを次のコマンドでコンパイルします。

$ LANG=ja_JP.sjis gcc source.c

すると、以下の警告メッセージが出力されます。

warning: unknown escape sequence: '\203'

解決方法

gccは、ソースコードにおいて日本語(2バイト文字)に一部対応していません。
上記の "カーソル\n" の "ソ" の部分(#835C)と "ル" (#8386)という文字列を "835C 8386" として扱うのではなく、 "83 5C 83 86" という1バイト単位で扱うため、 "5C " の部分が "\" によるエスケープシーケンスとして、認識されてしまうからです。
そのため、未知のエスケープシーケンスがあるという警告が出力されます。
このようなシフトJISコードの文字の場合、2バイト目が16進数 "5C" である時、続けて "\" (0x5C)の文字を加えることで、文字化けを回避することができます。

改訂版:
#include <stdio.h>
int main()
{
 printf("カーソ\ル\n");
 return 0;
}

なお、コンパイラにgccを使う限り、この問題を解消する方法はありません。

Disclaimer

この情報は、米国Novell, Inc.およびノベル株式会社の内外から発生したものです。本文書の内容または本文書を使用した結果について、いかなる保証、表明または約束も行っていません。また、本文書の商品性、および特定目的への適合性について、いかなる黙示の保証も否認し、排除します。

本文書に記載されている会社名、製品名はそれぞれ各社の商品、商標または登録商標です。

  • ドキュメントID: J00006574
  • 作成年月日: 10-FEB-2006
  • 修正年月日:
  • ドキュメントリビジョン: 1
  • 分類: SUSE Linux
  • 対象NOVELL製品およびバージョン: SUSE Linux Enterprise Server 9
  • カテゴリ: