タグ

PL-Cに関するsasaplus1のブックマーク (108)

  • 関数ポインタでC構造体に関数を入れよう

    ネタ元:Visual Basic でなんとなくイベントとデリゲート その4。 - デリゲートとは? - チラ裏でも書いたので、関数ポインタ(だけ)について。 変数にポインタがありますが、これと同様に関数にもポインタが使えます。 関数にはアドレス定義されていますので、このアドレスをさすポインタを作ってやることで関数ポインタとして動作させることができます。 ただし、関数は変数と違って、引数や戻り値というものが存在しますので、関数ポインタの宣言は定義先の関数ポインタを同じものを定義します。 戻り値 (*ポインタ名)(引数); このようにすることで、classの定義がないC言語でもクラス(の、ようなもの)と同じような書き方ができます。 あまりよろしくないですが、使用例。 #include "stdio.h" /* console構造体を定義 */ typedef struct _console {

  • 小規模ファームウェア開発 ─ 開発環境

  • JTN002 — Jera Design LLC

    JTN002 - MinUnit -- a minimal unit testing framework for CIntroductionUnit testing frameworks are quite popular in the object-oriented programming world. Frameworks like JUnit (for Java), SUnit (for Smalltalk), and CppUnit (for C++) provide a rich set of functionality. However, this rich set of functionality can be intimidating to someone who wants to do unit testing in a more constrained environm

  • Cでのユニットテスト | hexacosa.net

    仕事ではC言語をよく使っていますが、ユニットテストが 手動とかめんどくさすぎます。自分でAPIを作成してますが、 チェック用の関数がint用とか文字列用とか分かれてしまってかっこ悪い。 なにかいい手はないかと探してみると、C言語用のユニットテスト用フレームワークも 色々あることがわかった。その中でも MinUnit はシンプルでどこでも使い回しがききそう。 わずか3行です。 短いので引用。 /* file: minunit.h */ #define mu_assert(message, test) do { if (!(test)) return message; } while (0) #define mu_run_test(test) do { char *message = test(); tests_run++; \ if (message) return message; } w

  • C言語用ユニットテストフレームワーク - ヤマモトの日記

    Check: A unit testing framework for C というのを見つけたのでドキュメントを眺めていたら Other Frameworks for C - Check 0.9.5 ということで、いくつかのフレームワークが紹介されていました。いくつかのものは知っていました。GNUのものは知らなかったですね。 僕の好みはMinUnitです。 これはたった3行しかありません。でもそれで十分だと思います。ポータブルですし、長期にわたって使い続けられるか?という点で強みがあると思います。

    C言語用ユニットテストフレームワーク - ヤマモトの日記
  • C言語の単体テスト、いろいろ - ソフトウェアテストの勉強室

    ある意味、餃子ブームだ。 == メールサーバってCだから、C向けのテスト手法はいろいろと調べたりすることが多いし、自分でツールを作ったりします。せっかく調べたので、C言語をターゲットとした単体テスト/ユニットテストツールを枚挙してみる。 CUnit http://sourceforge.net/projects/cunit/によるユニットテストフレームワーク。出力に「__FILE__」「__LINE__」を記載して、分析しやすく結果を表現する。XML出力モード(Automatedモード)で実行し、DTDとXSLスタイルシートによって、統計情報が見やすくなる。 CUnit for Mr.Ando 安藤利和さんによる「言語技術者のC言語技術者によるC言語技術者のための C言語テスティングフレームワーク」。ソースはhttp://sourceforge.jp/projects/cunitforan

    C言語の単体テスト、いろいろ - ソフトウェアテストの勉強室
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • Windows プログラミング #2

    [Contents]- トップページ - 自己紹介 - ダウンロード - プログラマ度診断 - リンク - ゲストブック - 質問BBS [Programming] - VB 2005 - C 言語 - アセンブラ - Windows - Win2K Apache - Java3D - ヒント - 書籍紹介 Last modified : 2006.06.20 WinMain 関数 CUI (Character User Interface) アプリケーションでは、C言語のプログラムは main 関数から出発しました。では WindowsGUI (Graphical User Interface) アプリケーションでは、どこからプログラムが出発するのでしょうか? Windows のプログラムは "WinMain" 関数から出発します。VC++ の場合、Wi

  • MinGWでmsvcrt.dllに依存しないをバイナリを生成したい。 - 片っ端から忘れていけばいいじゃない。

    (2010/06/20 23:43) MinGWでビルドしたバイナリは、通常、msvcrt.dll に依存します。 たとえ Win32 API のみでプログラムを書いたとしても、MinGWが内部的にリンクするモジュールにC言語の標準関数が使用されているため、やはり msvcrt.dll への依存は取り除けません。 今回は、その「通常」から一歩はみ出して、非常に単純なプログラムながら、msvcrt.dll に依存しないバイナリを生成してみました。 EchoArgs.c #define WIN32_LEAN_AND_MEAN #include <windows.h> void mainCRTStartup() { LPCTSTR lpszCommandLine = GetCommandLine(); MessageBox(NULL, lpszCommandLine, lpszCommandLi

  • プログラミング言語 C の新機能

    プログラミング言語 C は 1990 年に ISO で規格化された言語です。その後、何度かの誤りの訂正や wchar_t 型の追加といった追補がなされた後、さらに使いやすくするための新しい機能が検討されてきました。そして、1999 年、ついに新しいプログラミング言語 C の仕様「ISO/IEC 9899:1999 - Programming Language C」(略称 C99) が 1999/12/01 付けで規格として出版されました。ここでは、その新機能を説明します。

  • C言語・C++言語用テスティングフレームワーク - Cutter

    最新リリース 2019-09-13にリリースされた1.2.7が最新です。 [ダウンロード] [変更点] Cutterとは Cutterは書きやすさ・デバッグのしやすさを重視したC言語・C++言語用のテスティングフレームワークです。メンテナンスしやすく、利用効果の高い単体テスト(ユニットテスト)の開発を支援します。 また、テストを苦痛ではなく、楽しいものにすることも重視しています。スクリーンショットはテスト結果の通知機能を利用している様子です。文字としてテストのパス・失敗を伝えるだけではなく、視覚的にも通知することで、テスト結果をわかりやすくします。わかりやすいので、頻繁にテストを実行したくなります。この機能はnotify-sendコマンド(Linuxや*BSDなどの場合)またはgrowlnotifyコマンド(macOSの場合)を利用します。 動作環境 CutterはDebian GNU/L

  • 標準Cライブラリの実装

    しばらく忙しくて放置していますが、また春頃になれば、それなりに注力できる可能性があります。もっとも、そのころになれば、JSPカーネルではなく、ASPカーネルに対応することを考えるような気もしますが...。 さて、このたび、このブログで公開しているソースコードのライセンスに関して質問を受けました。このブログは、あくまでも実装レポートで、私が実装中に考えたことや、判断に迷ったことなどを交えながら、記録を残して行けたらと思って始めたものです。現在公開されている内容も、ざっと動作は見ていますが、いろいろバグも指摘されていますし、私自身も過去の記事のバグを見つけています。 そんな感じで、まだ現状では非常に完成度は低いと考えてください。それでもよければ、あくまでも自己責任の下で、自由に利用していただいてかまいません。ただし、(合法・非合法にかかわらず)反社会的または反人道的な用途への利用だけはご遠慮く

  • C言語・C++言語用テスティングフレームワーク - Cutter

    最新リリース 2019-09-13にリリースされた1.2.7が最新です。 [ダウンロード] [変更点] Cutterとは Cutterは書きやすさ・デバッグのしやすさを重視したC言語・C++言語用のテスティングフレームワークです。メンテナンスしやすく、利用効果の高い単体テスト(ユニットテスト)の開発を支援します。 また、テストを苦痛ではなく、楽しいものにすることも重視しています。スクリーンショットはテスト結果の通知機能を利用している様子です。文字としてテストのパス・失敗を伝えるだけではなく、視覚的にも通知することで、テスト結果をわかりやすくします。わかりやすいので、頻繁にテストを実行したくなります。この機能はnotify-sendコマンド(Linuxや*BSDなどの場合)またはgrowlnotifyコマンド(macOSの場合)を利用します。 動作環境 CutterはDebian GNU/L

  • http://rararahp.cool.ne.jp/vc/vctips/dll.htm

    VCで作成できるDLLには、大きく分けてWin32DLL,MFCDLLがあります。 Win32DLLは、MFCを使用しないDLLです。 また、MFCDLLには、レギュラーDLLと、拡張DLLがあり、 レギュラーDLLが、MFCを内部的に利用するDLL, 拡張DLLが、MFCライブラリクラスから派生したクラスをDLLを作成するとき に使うDLLです。まず、Win32 DLLを説明します。DLL内の関数を他のプログラムから呼び出すには、 その関数をエクスポートする必要があります。 エクスポートするには、declspec(dllexport)キーワードを 使用するか、DEFファイルを使用する方法があります。また、DLLをリンクするには、以下の2つの方法があります。・暗黙的リンク(静的リンク) ・明示的リンク(動的リンク) このようにDLLには、作成、使用方法にいくつか種類があります。そ

  • 二流プログラマの三流な日常: C++で作成したDLLを他の言語で利用できるようにする

    C++でDLLを作成していざVisual Basicから呼ぼうとすると関数が呼べない。 そんな問題を解決した経験があるならば、関数の装飾名や呼び出し規約についてご存じでしょう。実は、1年ほど前に同等の記事を長々と書きましたが、重要な部分だけを再びおさらい、ちょっと補足。 意味もなくDEFファイルを作っている人は理解が足りないかもしれません。 そもそも、言語による関数呼び出しとは、呼び出し先と呼び出し元で呼び出し規約を一致させる必要がある。呼び出し規約とは一緒に決めた約束事と思ってもらって構いません。 そして、旧Visual BasicがWindows APIと同じstdcall規約しかサポートしない事から、出来るだけ多言語から使えるようにするためにはstdcall規約を使うのが望ましいです。 さて、Visual C++でstdcall規約を使うと不幸な内部装飾が生成されるため、DLLの関数

  • いまさらC言語のexternで悩む – ビットログ

    とある製品のソースコードを眺めていたときに疑問に思って調べたことをメモします。 C言語で通常、大域変数(グローバル変数)を複数のソースファイルで共有する場合、共通でincludeするヘッダファイルにextern int abc;みたいに書いて、ソースファイルのいずれか1つに実体をint abc;みたいに書くと(私は)思っていたのですが、その製品のソースではヘッダファイルの方にint abc;とあり、各ソースファイルにextern int abc;という風に書かれています。 一瞬、それぞれのモジュール(ソースファイル)に別々の実体が存在するのかな、と思ったのですが、実際のその製品の動きを見てみるとちゃんと変数を共有して使っているようです。 私のいままでの理解が間違っているかもしれないので調べようと思ったのですが、C言語の規約を調べるのも億劫だし、環境依存かもしれないので、とりあえずサンプルを

  • 変数にexternをつけるってどういうこと? - bugfix

    次のようなコードを書いてコンパイルしたときのお話. /* src1.c */ #include <stdio.h> int a; int sub(int n) { printf(" sub::a: %d\n", a); printf(" sub::a: %p\n", &a); return n+1; } /* src2.c */ #include <stdio.h> int a; int main() { int x; x = sub(a); fprintf(stdout, "x: %d\n", x); printf("a: %p\n", &a); return 0; } まず,間違っていることに気づかず行っていたこと グローバル変数は0で初期化されます.つまり,定義が同時に行われます. extern記述子を使うことで,どこかで定義してあることを伝えられます. つまり,externは同じグ

    変数にexternをつけるってどういうこと? - bugfix
  • よくみる extern "C" {} と __cplusplus - はこべにっき ♨

    C向けのライブラリのコードをながめていたらちょくちょく以下のようなコードをみる. #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Cのコードがたくさん */ #ifdef __cplusplus } #endif /* __cplusplus */ なんだろうと思って調べてみたら. __cplusplus g++でコンパイルされるとdefineされるマクロ extern "C" { /* Cのコード */ } ブレースでかこまれた範囲で,リンカでの識別子の扱い方がCスタイルになる らしい."この範囲のコードはCで書かれてるから,g++でコンパイルするときはCだとおもってよろしくしてあげてね"ってことみたい. Cで書かれたライブラリはCで使われることもC++で使われることもあるから,こういうコードでうまくその差を吸収して

    よくみる extern "C" {} と __cplusplus - はこべにっき ♨
  • VC++「DLL作成/呼出方法」メモ(Hishidama's VC++Memo "DLL")

    DLL作成方法・呼出方法 DLLの作成方法。(VC++4.0と6.0は、内容は同じ) MFC DLLの作成方法 SDK DLLの作成方法 DLLの呼出方法(暗黙的・静的リンク) DLLの呼出方法(明示的・動的リンク) [2006-08-22] DLLの補足(暗黙的リンクと明示的リンクの使い分け等) [/2007-09-28] DLLの呼出方法(VBA) [2006-08-22] .NETクラスライブラリの作成方法 [2006-07-28] .NETでの旧形式DLLの作成方法 [2006-07-28] (VC++4.0 MFC)プロジェクトの作成 メニューバーの「ファイル(F)」→「新規作成(N)」で「新規作成」ダイアログを開く。 「作成するファイルの種類(N)」で「プロジェクトワークスペース」を選んでOKボタンを押す。 「タイプ(T)」に「MFC AppWizard (dll)」を選ぶ。あ

  • CUnitによるテスト駆動開発

    はじめに CodeZineでの僕のデビュー記事『Cで実現する「ぷちオブジェクト指向」』、おかげさまでなかなか好評だったようです。まだまだCは現役だと実感しました。 前回に引き続きCのお話です。テストをよりどころに実装をすすめ、信頼できるコードを書くためのプラクティス「テスト駆動開発」(TDD:Test Driven Development)を、Visual C++ 2005 Express EditionとUnit Test Framework: CUnitで行います。 対象読者 そこそこのコードは書けるようになったけれど、どうも詰めが甘い/くだらないバグに出くわす/あっちを直すとこっちが壊れ、ぐだぐだになってしまう…そんな症状に悩まされている脱ビギナを目指すプログラマ。 テスト、してますか? 「プログラムは思ったとおりには動かない、作ったとおりに動く」 思ったとおりに作ってないと思ったと

    CUnitによるテスト駆動開発