WIN10/1607コマンドプロンプト GCCコンパイラのSJIS 対応状況メモ

                                20170206

WindowsPC(Win10/1607)のコマンドプロンプトでコンパイラGCCを使う時,SJISへの対応が望ましい。

SJISへの対応はオプションとして「-finput-charset=cp932」と「-fexec-charset=cp932」を使うことになっている。
しかし,その対応はGCCの環境やバージョンによって異なっている。
この文書の内容は,この文書作成時点で有効な内容である。


【1】Win10/1607コマンドプロンプト+Cygwin64+GCC5.3.0,GCC5.4.0
コンパイルの仕方 gcc -std=c99 -finput-charset=cp932 -lm a.c -o a.exe
動作OK SJISOK 問題文字「ソ」もOK

https://cygwin.com/install.html
setup-x86_64.exeでインストール
$ uname
CYGWIN_NT-10.0
$ cygcheck -c cygwin
Cygwin Package Information
Package              Version        Status
cygwin               2.6.1-1        OK


1.コンソール出力
Cテストソース(SJIS) a.c

#include <stdio.h>

int main()
{
    printf("Hello world!  ソース焼きそば\n");
    return 0;
}

コンパイル
「-finput-charset=cp932」と「-fexec-charset=cp932」が必要だと思ったら,
「-finput-charset=cp932」のみでよい。
「-fexec-charset=cp932」をつけると文字化けする。
gcc -std=c99 -finput-charset=cp932 -lm a.c -o a.exe

実行結果
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

>a.exe
Hello world!  ソース焼きそば


2.ファイル出力
Cテストソース(SJIS) a1.c

#include <stdio.h>

int main()
{
    FILE *fp;
    fp=fopen("a1.txt","w");
    fprintf(fp,"Hello world!  ソース焼きそば\n");
    fclose(fp);
    return 0;
}

コンパイル
gcc -std=c99 -finput-charset=cp932 -lm a1.c -o a1.exe

実行結果
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

>a1.exe

>type a1.txt
Hello world!  ソース焼きそば


【2】Win10/1607コマンドプロンプト+MinGW+GCC5.3.0
実行結果の日本語が文字化けする

https://sourceforge.net/projects/mingw/?source=typ_redirect
mingw32-base 2013072200
mingw32-gcc-g++ 5.3.0-3

Cテストソース(SJIS) a.c

#include <stdio.h>

int main()
{
    printf("Hello world!  ソース焼きそば\n");
    return 0;
}

コンパイル
gcc -std=c99 -finput-charset=cp932 -fexec-charset=cp932  -lm a.c -o a.exe
cc1.exe: error: no iconv implementation, cannot convert from cp932 to UTF-8
コンパイルできない。
それでも
gcc -std=c99 -lm a.c -o a.exe
a.c: In function 'main':
a.c:5:9: warning: unknown escape sequence: '\201'
  printf("Hello world!  ソース焼きそば\n");
と警告を出す。

実行結果 当然文字化け
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\Users\tommy>cd C:\Users\tommy\Desktop

C:\Users\tommy\Desktop>a.exe
Hello world!  メ[ス焼きそば



【3】Win10/1607コマンドプロンプト+MinGW64+GCC5.3.0
コンパイルの仕方 gcc -std=c99 -finput-charset=cp932 -fexec-charset=cp932 -lm a.c -o a.exe
動作OK SJISOK 問題文字「ソ」もOK

https://sourceforge.net/projects/mingw-w64/?source=typ_redirect

以下の2つのインストールで試した。
x86_64-5.3.0-win32-sjlj-rt_v4-rev0
Version        5.3.0
Architecture   X86_64
Threads        win32
Exception      sjis
Build revision 0

x86_64-6.3.0-win32-sjlj-rt_v5-rev1
Version        6.3.0
Architecture   X86_64
Threads        win32
Exception      sjis
Build revision 1

Cテストソース(SJIS) a.c

#include <stdio.h>

int main()
{
    printf("Hello world!  ソース焼きそば\n");
    return 0;
}

コンパイル
gcc -std=c99 -finput-charset=cp932 -fexec-charset=cp932 -lm a.c -o a.exe

実行結果
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

>a.exe
Hello world!  ソース焼きそば