2022年8月14日日曜日

gcc と エンコード

C ++の初心者です。

C、C#とともに何度か入門しましたが、実務ではそれほど用がなかったため、覚える前に辞めてしまう状態が続いています。此度、実務(Windows10)で使うことになり、あらためて入門です。

Visual Studio 2019 を使ってコンパイルしていると、scanf でエラー。

error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
そうでした。https://phreeqc.blogspot.com/2021/05/c.html
scanf_s を使うと通りましたが、デバッグでエラー。
test.exe (プロセス *****) は、コード -****** で終了しました。
忘れていますね。scanf_sで文字列を入力する場合には第三引数で最大配列数を指定する必要がありました(引数不足のwarning が出ていましたが、無視していました)。 

引数を指定し、できたexe を実行!
動きました。

表示がすぐに消えてしまうので、「Enterkey を押して終了させたい。」をコピペ。
https://teratail.com/questions/140273
これでOK。

次はgcc
tdm64-gcc-10.3.0-2 を Win11 に入れて、ターミナル起動。gcc -v で動作確認。

>gcc -v
gンン spec gpオト「ワキB
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/TDM-GCC-64/bin/../libexec/gcc/x86_64-w64-mingw32/10.3.0/lto-wrapper.exe
・・・
T|[gウト「 LTO ウkASY€: zlib zstd
gcc o[W 10.3.0 (tdm64-1)

文字化けします。
コマンドプロンプト表示をUTF-8に変更

>chcp 65001
Active code page: 65001

>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/TDM-GCC-64/bin/../libexec/gcc/x86_64-w64-mingw32/10.3.0/lto-wrapper.exe
・・・
algorithms: zlib zstd
gcc version 10.3.0 (tdm64-1)

OKです。では、コンパイル。コードはUTF-8。

>g++ -o test test.c

できたexeを起動すると、文字化けしています。Win の実行ファイル側では shift-JIS 固定なのでしょう。
実行ファイルでのエンコードをCP932として指定します。

>g++ -o test test.c -fexec-charset=CP932

うまく変換できているように見えます。もう少しテストが必要かな。
ひとまず、環境構築は完了です。

0 件のコメント:

コメントを投稿