Skip to content

yakenohara/GCC-ifdef_switcher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

C言語のソースコードファイル(*.c, *.h)内の、
コンパイルスイッチを指定して、 GCC が解釈したソースコードを出力する。

Limitation 多すぎ。注意。

Requirements

  • GCC(パスが通っている事)

Installation

ifdef_switcher フォルダをまるごと好きなところに配置する

Usage

Edit settings before run

  1. gcc コマンド用のオプション定義ファイル gcc_option.sh 内の、User Defintions 内を編集する.

※ Do not use following

  • space characters
  • comment out keyword <<
  • single quoted string, like as follow. Use double quoted string instead.
    -D'IN=1'
    
  • return escaping \, like as follow
    -D"QQQ(IN)=(IN? \
                TRUE: \
                FALSE \
               )"
    

↓ 同封のサンプルファイル example\ex.c の、#define 値、XXXQQQ(IN) を有効にする例 ↓

# < User Defintions >----------------------------
-D"XXX"
-D"IN=1"
-D"QQQ(IN)=(IN?1:0)"
# ----------------------------</ User Defintions >
  1. 文字エンコーディング

以下ファイル内の $enc_name = "utf-8" を環境に合わせて編集する

  • escape_preprocess.ps1
  • restore_escaped.ps1

↓ シフト JIS を設定する例 ↓

`$enc_name = "shift_jis"`

※設定可能な文字エンコーディングのリストは、Powershell ターミナルで以下を実行する事で確認可能。

&{
    for($cnt = 0; $cnt -lt 65535; $cnt++){
        try{
            $enc = [Text.Encoding]::GetEncoding($cnt)
            $web_name = $enc.WebName
            $enc_name = $enc.EncodingName
            Write-Output "$cnt, $web_name, $enc_name"
        } catch {}
    }
}

Run

ifdef_switcher\ifdef_switcher.bat に 変換対象の ソースコード (*.c, *.h) を含んだフォルダを指定してたたく。

↓ 同封の example フォルダを指定した例 ↓

.\ifdef_switcher\ifdef_switcher.bat example

上記の例では、example フォルダの隣に、example_switched という、_switched が付加されたフォルダが生成される。

※生成に失敗した場合は 標準出力にエラー内容が出力されます。
エラー内容を確認してください。

Limitation

GCC に起因するもの

  • Cgywin の gcc-core 環境の場合
    変換対象のソースコードのパスに日本語が入っていると No such file or directory がでることがある

gcc -E コマンドに起因するもの

  • ソースコード内の #include は無視する仕様。
    無視しないと、指定したインクルードファイル内の全文字列を展開した状態のソースコードが出力されてしまうから。
    その為、インクルードファイル内に #ifdef スイッチを制御するための #define 値を定義している場合は、
    gcc_option.sh 内のオプションにその #define 値を定義して使用する。

  • ソースコード内の改行コードがに変換されてしまう
    確認した限りで、
    Cygwin 環境版 gdb 8.1.1-1 の場合は、\n
    MSYS2 環境版 mingw-w64-x86_64-gdb-8.3-9 の場合は、\r\n

  • ファイルの最終行が空文字でない場合は、強制的に空行が付加される