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

                                20211113

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

SJISへの対応はオプションとして「-finput-charset=cp932」と「-fexec-charset=cp932」を使うことになっている。
しかし,その対応はGCCの環境によって異なっている。

【1】Win10/19043コマンドプロンプト+Cygwin64+GCC11.2.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               3.3.2-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/19043コマンドプロンプト+MinGW64+GCC8.1.0
コンパイルの仕方 gcc -std=c99 -finput-charset=cp932 -fexec-charset=cp932 -lm a.c -o a.exe
動作OK SJISOK 問題文字「ソ」もOK
http://mingw-w64.org/
MingW-W64-builds
https://sourceforge.net/projects/mingw-w64/
→ mingw-w64-install.exe


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!  ソース焼きそば