プログラミングなどなど

プログラミングに関係しそうな内容を

C

GCC:重複定義(Multiple Definition)を許可するオプションを関数単体試験に利用する

このブログでは、現在「GCC:関数重複定義(Multiple Definition)を-z muldefsで許可する - プログラミングなどなど」が見られている回数が圧倒的に多く、全体の約半分を締めています。個人的には使用することが無かったため、なぜ、こんなに見られるのだろう…

GCC:関数重複定義(Multiple Definition)を-z muldefsで許可する

C

同僚の方が一時的な確認のために同名の関数を静的リンクした実行ファイルを作成しようとしてエラーになっていました。C言語ではできないんじゃないかな。と思っていたのですが、「HPではできたのに〜」と言っていたのを聞き、ならばGCCでもオプションでどう…

C言語:GDBによるデバッグ

0からnまでの整数の和を求める例を題材にデバッガ(gdb)の使用例を紹介したいと思います。バグがある状態から始めます。 main.c(バグ有り) int sum(int n) { int acc = 0; int i; for (i = 0; i < n; i++) { acc += i; } return acc; } int main(void) { int …

C言語:型に性質をもたせる?(コンパイル時の警告まで)

C

[増補改訂]関数プログラミング実践入門 ──簡潔で、正しいコードを書くために (WEB+DB PRESS plus)の「1.5 型に性質をもたせる HTMLの文字列エスケープ」を読んで、C言語の場合はどんな風にできるのかと思い実装してみました。おそらくコンパイル時のチェック…

GCC:LD_PRELOADを使用したmallocの動作切替

今回もC言語の関数単体テスト系の話題です。mallocを利用する関数を試験する際にmallocのスタブを作成して単体試験を実行しようとすると単体試験のツール自体がmallocを使用していたりしてうまく動かないケースがあります。このような場合、GDBを使用してmal…

GCC:-includeを使用したマクロ展開制御

C言語の関数単体テストを作成している際に関数形式マクロの展開を調整したいと思う部分が出てきました。使用していたコンパイラはGCCでマニュアルを見るとマクロの読み込みを制御するオプション(-include)がありましたので、使ってみました。使用したのは以…

SPIN,C言語,デバッグ:State Vectorと変数

「SpinIntro.pdf」の「SPIN's Basic Data Structures」を見ると状態ベクトル(State vecot)は全ての変数を保持している旨の記載があります。また、PanのCompile-Time Optionsには状態ベクトルをダンプするオプション(SDUMP)について記載があります。コンパイ…

C言語:ビットフィールド

C

SPINのstate vector(状態ベクトル?)が気になってデバッグしているときに、pan.cでビットフィールドが使われている箇所を見つけました。C言語の本で存在は知っていたのですが、使用したこともなく、また実際のコードで見たのは初めてでした。state vectorの理…

C言語:積を計算する関数も定義してみる

C

階乗を計算する関数 和に引き続き積についても同じように関数を定義したいと思います。まずは、階乗を求める関数から定義してみます。ソースは前回からの続きとなっています。 factorial01.c #include "util.h" int factorial(int n) { int acc = 1; int i; …

C言語:和を計算する高階関数で関数ポインタを使ってみる

C

関数ポインタとは 関数ポインタとは関数を指すポインタのことです。私がC言語を学び始めた頃はポインタについてよく理解していないこともあり、関数ポインタが何の役に立つのかわかりませんでした。 そんな中、関数ポインタを理解するきっかけになったのは、…