hakeの日記

Windows環境でプログラミングの勉強をしています。

C

MSYS2環境のgccで作成したexeでの日本語表示

忘れそうなのでメモ。環境は、MSYS2のWin64 Shell(MSYS2 Shellではない)上のgccの場合。 予め.bashrcに環境変数LC_ALLを設定しておく。 export LC_ALL=ja_JP Cのソース内にsetlocale(LC_ALL, "")を記述する。 #include <stdio.h> #include <locale.h> #include <wchar.h> int main(int </wchar.h></locale.h></stdio.h>…

MinGW環境としてRumix2のDevKitを使用する。

Ruby/Tkの勉強環境としてインストールしたRumix2は、(選択すると)同時にDevKitがインストールされます。これはrubygemsでruby関連のツールをインストールするときにコンパイルが必要な場合に使用される環境です。DevKit中を覗くとMinGWで使用するツール類…

MinGW gccでSJIS文字を扱う方法

コンパイルオプションとして-finput-charsetと-fexec-charset使えば良いらしい。gccのデフォルトはutf-8の様です。 ソース #include <stdio.h> int main(void) { printf("ソース焼きそば\n"); return 0; } 実行結果 ~/test$ gcc test.c test.c: 関数 'main' 内: test.</stdio.h>…

re2cメモ その2

字句解析対象の文字列をファイルから読み取る様にしてみました。 といってもre2cのソースフファイル中のサンプルに既にYYFILL(n)で使用する為の関数fill()が用意されていたので基本的にそれを使用しました。一点open()とread()をそれぞれfopen(),fread()に変…

re2cメモ その1

字句解析ツールでre2cというのがあるということを知ったので勉強メモ テスト環境は、Windows上のMinGWで、本家サイト re2c HomeのリンクからWindows用バイナリ(re2c-0.13.5-bin.zip)をダウンロードできるのでこれを使用しました。 基本の書き方は以下のと…

bison & flexメモ その6

C言語でbisonとflexを使う方法のメモ 式の構文木を作ってみる。 mainからyyparse()を呼んで入力した式の構文木を作成してそのポインタを返す。そのポインタからeval_tree()で式を評価、free_tree()で構文木の為に確保したメモリの解放を行う。構文木はNode型…

bison & flexメモ その5

C言語でbisonとflexを使う方法のメモ bison単体で使用する場合と比較して、字句解析の関数yylex()部分をflex側にまかせている。このときbisonが生成するヘッダファイルをflex側で読み込むことで、bison側で定義したトークンの種別をflex側で使用可能になる、…

bison & flexメモ その4

C言語でbisonを使う方法のメモ 基本的なフォーマットは以下、flexと同じような感じ %{ 初期Cコード %} BISON宣言 %% 構文規則 %% 他のCコード

bison & flexメモ その1

環境は、Windows XP上のMinGWで、flexのバージョンは2.5.35、bisonのバージョンは2.4.2 いきなり両者を使うとよく理解できないので、まずはC言語でflexを使う方法のメモ。基本的なフォーマットは以下 %{ 初期Cコード %} %% パターン アクション %% 他のCコー…

bison & flexメモ その2

C言語でflexを使う方法のメモ つづきファイルの入出力は、FILE*型の変数yyinとyyoutによって行われる。デフォルトではstdinとstdoutが選択されているので、これをfopen()で開いたファイルに変更することで、ファイルへの入出力が可能になる。

bison & flexメモ その3

C言語でflexを使う方法のメモ その3 スタート状態について %% 〜 %%間のどのルールを有効にするかを指定する。 %x state_name %s state_name%sまたは%xに続いて使用する状態名を記述する。 %x(排他的スタート)はその状態名が書かれたルールのみ有効になり…

MinGW+MSYSのインストール

インストール方法のメモ MinGW - Minimalist GNU for Windowsからインストールプログラムをダウンロード。現時点のファイル名はmingw-get-inst-20101030.exe。今回のインストール先はD:\MinGW ファイルを実行、言語はCとC++を選択。言語以外はとりあえず全部…

静的ライブラリのリンク

昨日の疑問点だったlibstdc++をstaticに取り込む方法、判ってみれば簡単なことだった。普通にcppなソースと同等に扱えば良いみたい。 $ gcc -L. -lcalc main.cpp libstdc++.aポイントは.cppや.oよりも後に書くこと。lddの出力は以下 $ ldd a.out libcalc.so.…

静的ライブラリの作成

それならば静的ライブラリも作ってみようということでググってみた。この辺を参考にして $ gcc -fPIC -c calc.cpp calc.oができる(-fPICが無くても使用可能なライブラリはできた) $ ar rv libcalc.a calc.o libcalc.aができる $ gcc main.cpp libcalc.a libs…

共有ライブラリの作成

前々から疑問に思っていたsoなファイルってどうやって作るんだろう?という疑問について調べてみました。ググったところこちらに解りやすい説明があったので実験してみる。環境は先日入れたzgcc42です。

共有ライブラリの作成 その2

次にクラスについても実験。やり方は一緒。 ところが今回はコンパイル時(リンク時?)に undefined reference to `operator new(unsigned)'というようなエラーがいくつか出てしまった、ググったところ回避するには-lstdc++オプションを付ければ良いとのこと…