前提
MacPCでC/C++の勉強をしたくなったので、VSCodeで学習できるように、必要な拡張機能を加えつつ環境構築をしています。「これも使ってみよう。これは今段階ではいいかな...」と色々試行錯誤していたんですが、もう少しで構築完了というところでつまづいてしまいました...
実現したいこと
printfで、「こんにちは」といった日本語(マルチバイト文字)を含む文字列を、コンパイル&実行で出力される[ターミナル]パネル上ではなく、ビルド&デバッグで出力される[デバッグコンソール]パネル上で正しく表示させたいです。
該当のソースコード
C
// ファイル名:test.c #include <stdio.h> int main(){ printf("こんにちは\n"); return 0;}
発生している問題・エラーメッセージ
上記のソースコードを拡張機能[C/C++]の機能で、「ファイルの実行」もしくは「ファイルのデバッグ」すると、[デバッグコンソール]パネルに以下のように出力されます。
Warning: Debuggee TargetArchitecture not detected, assuming x86_64. =thread-selected,id="1" =library-unloaded,id="/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test",target-name="/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test",host-name="/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test" Loaded '/usr/lib/dyld'. Symbols loaded. Loaded '/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test'. Symbols loaded. Loaded '/usr/lib/libSystem.B.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcache.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcommonCrypto.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcompiler_rt.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcopyfile.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcorecrypto.dylib'. Symbols loaded. Loaded '/usr/lib/system/libdispatch.dylib'. Symbols loaded. Loaded '/usr/lib/system/libdyld.dylib'. Symbols loaded. Loaded '/usr/lib/system/libkeymgr.dylib'. Symbols loaded. Loaded '/usr/lib/system/liblaunch.dylib'. Symbols loaded. Loaded '/usr/lib/system/libmacho.dylib'. Symbols loaded. Loaded '/usr/lib/system/libquarantine.dylib'. Symbols loaded. Loaded '/usr/lib/system/libremovefile.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_asl.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_blocks.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_c.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_configuration.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_coreservices.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_darwin.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_dnssd.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_featureflags.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_info.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_m.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_malloc.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_networkextension.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_notify.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_sandbox.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_secinit.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_kernel.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_platform.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_pthread.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_symptoms.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_trace.dylib'. Symbols loaded. Loaded '/usr/lib/system/libunwind.dylib'. Symbols loaded. Loaded '/usr/lib/system/libxpc.dylib'. Symbols loaded. Loaded '/usr/lib/libobjc.A.dylib'. Symbols loaded. Loaded '/usr/lib/libc++abi.dylib'. Symbols loaded. Loaded '/usr/lib/libc++.1.dylib'. Symbols loaded. xe3x81x93xe3x82x93xe3x81xabxe3x81xa1xe3x81xaf The program '/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test' has exited with code 0 (0x00000000).
問題なのは
xe3x81x93xe3x82x93xe3x81xabxe3x81xa1xe3x81xaf
の部分で、このように文字化け...と言いますか、16進数の羅列みたいな感じで表示されてしまいます。この時[ターミナル]パネルの方は、以下のようになっています。
> Executing task: C/C++: gcc-11 アクティブなファイルのビルド < ビルドを開始しています... /usr/local/bin/gcc-11 -fdiagnostics-color=always -g /Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test.c -o /Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test ビルドが正常に完了しました。 Terminal will be reused by tasks, press any key to close it.
関連する構成・設定ファイル
json
// ファイル名:c_cpp_properties.json{ "configurations": [ { "name": "Mac", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "macFrameworkPath": [], "compilerPath": "/usr/local/bin/gcc", "cStandard": "c17", "cppStandard": "c++17", // "cppStandard": "c++14", // 競プロ用 "intelliSenseMode": "macos-gcc-x64" } ], "version": 4}
json
// ファイル名:tasks.json{ "tasks": [ { "type": "cppbuild", "label": "C/C++: gcc-11 アクティブなファイルのビルド", "command": "/usr/local/bin/gcc-11", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "デバッガーによって生成されたタスク。" } ], "version": "2.0.0"}
json
// ファイル名:launch.json{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug", "program": "${workspaceFolder}/${fileBasenameNoExtension}", "args": [], "cwd": "${workspaceFolder}", "console": "integratedTerminal" } ]}
試したこと
拡張機能[Code Runner]を入れているので、これを使ってソースコードを「Run Code」、もしくはショートカット「[^control]+[⌥option]+[N]」キーを押すと、[ターミナル]パネル上では正しく出力されるようです。
VSCode % cd "/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/" && gcc test.c -o test && "/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/"test こんにちは
エンコードが一致していないかもと思ったので(VSCodeのステータスバーには「UTF-8」と表示されています)、
json
// ファイル名:launch.json "env": { "encoding": "utf-8" }
もしくは
json
// ファイル名:launch.json "env": { "encoding": "shift_jis" }
を末尾に付記したのですが、結果は変わらず...また、コンソールメッセージ最上部の
Warning: Debuggee TargetArchitecture not detected, assuming x86_64.
も気になったので、
json
// ファイル名:launch.json "targetArchitecture": "x86_64",
などと付け足してみたんですが、結局プロパティ名"targetArchitecture"の下に黄色の波線が表れて、[問題]パネルで
Property targetArchitecture is not allowed.
と怒られてしまいました。
補足情報(FW/ツールのバージョンなど)
※この質問記述時点のバージョンです。コンパイラに関しては、競技プログラミングに興味があることもあり、clangではなくgccをインストールしております。
- macOS:Catalina 10.15.7
- VSCode:1.68.0
- コンパイラ:gcc/g++ 11.3.0 (Homebrew GCC 11.3.0)
実装中の拡張機能
※VSCodeは他の言語でも使用しているため、一部のみを抜粋します。
- C/C++ Extension Pack:v1.2.0
- C/C++ Clang Command Adapter:v0.2.4
- CodeLLDB:v1.7.0
- Code Runner:v0.11.7
- Japanese Language Pack for Visual Studio Code:v1.68.6092124
- new-zenkaku:v0.0.4
json
// ファイル名:settings.json(一部のみを抜粋コピペ){ "clang.executable": "clang++", "clang.cxxflags": ["-std=c++17"], // "clang.cxxflags": ["-std=c++14"], // 競プロ用 "code-runner.runInTerminal": true, "code-runner.executorMap": { "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", "cpp": "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", // "cpp": "cd $dir && g++ -O2 -std=c++14 $fileName && ./a.out", // 競プロ用 }, // "cmake.configureOnOpen": true, "[cpp]": { "editor.defaultFormatter": "ms-vscode.cpptools" },}
追記
以下のように、英字の場合は正しく出力されます。
C
// ファイル名:test.c #include <stdio.h> int main(){ printf("Hello\n"); printf("こんにちは\n"); return 0;}
以上です。よろしくお願いいたします。
0 コメント