• ベストアンサー

リエントランスな関数

Situgyosyaの回答

回答No.3

「リエントラント(再入可能)」な関数  とは、当該関数実行中に、他のスレッドなどからさらに実行が可能  な実装仕様を言います。一般にWindowsのコールバック関数及び一  群のメッセージ処理関数群はリエントラントであることが要求され  ていますが、そうでなくても再入しない場合がほとんどなので動い  ちゃいます(笑)。但し、DLLの関数はリエントラントであることが  より強く要求されます。  似たように言葉に「リカーシブ(再帰可能)」がありますが、こちら  の条件は当該関数から当該関数をコールしても動作することです。  ニーモニックレベルだと「リロケータブル」というのも良く言われ  ますが、特別に処理しない限り、C言語では全てリロケータブルに  翻訳されます。

okazaki0ko
質問者

お礼

今回は、OSの設計でぶつかった問題でした。 なので、パソコンのOS類のお世話にはならない訳ですが(組み込み系の設計です)、DLLが再入可能である必要があることは、良く解ります。 リロケータブルは、ちょっと今回の件とは関係ないような・・・。 リエントランス・リエントラントについては、#2のお礼を見てください。

関連するQ&A

  • C言語のライブラリ関数の勉強の仕方

    はじめまして、私はC言語を勉強中の初心者です。 基本的な構文などを理解して、標準ライブラリ関数を勉強して行こうと思ったのですが、うまく勉強できずに苦戦しています。そこで2つ聞きたいことがあります。 1.普通標準ライブラリ関数はどの程度覚えるものなのでしょうか? 徹底的に網羅するのか、一般的なところは押さえて後は適当にやるのか、などを知りたいです。 2.関数はどうやって勉強したらいいのでしょうか? 私は細かいところまで徹底的に覚えたいタイプで、今は、自分のコンパイラ(VC++ 2008)のincludeフォルダにあるヘッダファイルを調べ、関数のプロトタイプ宣言をしてあるところを見つけて関数名を洗い出し、その関数名で検索を掛けて関数を覚えていく、という方法を取っているのですが、これだと恐ろしく効率が悪いです。皆さんはどうやってライブラリ関数について勉強していったのでしょうか? 質問したいのは上記の2点です。回答よろしくお願いします。

  • 標準ライブラリー関数を使用せずに文字出力

    はじめまして、C言語初心者です。 研修で、C言語を学ぶことになったのですが研修先から頂いた練習問題で「練習のため標準ライブラリー関数は使わない」で文字列を連結するための関数を作ることになったのですが、標準ライブラリー関数を使用せずに文字出力はできるのですか??

  • 標準ライブラリ関数

    C言語の勉強を始めたばかりです。 標準ライブラリ関数というのがたくさんありますが、実際のソースをのせているサイトってありませんか?たとえばstrcmpを使わずにアルファベット順に並べ替えるプログラムを作ってみたいのですが。お願いします。

  • 「数学」に標準規格は存在しないのでしょうか

    例えばプログラミング言語では変数名,定数名,関数名の命名規約があり, 数値には整数型,浮動小数点数型などの型が必ず与えられていたりと その言語の仕様が厳密に定義されています. IT分野では標準規格としてANSI,ISO,JIS,RFCなどさまざまな物がありますが, 「数学」ではそういった標準規格なるものは存在しないのでしょうか. 今まで見たことも聞いたこともなかったので質問させていただきました. よろしくお願いします.

  • 関数ライブラリ一覧

    C言語の関数一覧のようなものは何を見たらわかるのでしょうか? 標準関数の一覧はよく見かけますが、ほかの関数の一覧はないのでしょうか? たとえば、あるインターネット上で公開されていたソースコードには #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <sys/param.h> #include <sys/uio.h> #include <unistd.h> と書いてありました。 上3つは標準ライブラリにかいてありますが、その他は載ってません。 こういったsys/uio.hなどの仕様はどこで見れるのでしょうか? よろしお願いします。

  • プログラミングの勉強

    独学で言語をまなんでいるのですが、どこまでやれば一通りは学べたとして次の言語に進めるのでしょうか?文法はとうぜんとして、標準ライブラリ関数などはどこまでおぼえるものでしょうか?

  • コンソールプログラムで使用するライブラリについて

    今まで疑問に感じつつないがしろにしていた部分なんですが、 例えばWin32APIを使用してプログラミングする時にコンパイラはリンクの際にwindowsのシステムフォルダ内にあるdllファイルを参照してリンクするんですよね(あってます?)?ではコンソールプログラム(dos上のプログラム)をリンクする際にはどうなるのでしょうか(例えばCの標準関数のライブラリはどこにあるのでしょうか?)? 私の予想では標準関数に関してはコンパイラが予め用意している静的ライブラリを使ってリンクしているんじゃないかと思うのですが実際どうなんでしょうか? 大した質問でもないのに長々とした文章になってしまいましたがよろしくお願いします。

  • peace関数について

    hp、ANSIで作成された関数を他のUNIX環境(Solaris2.5.x)に移植しようとしています。 その中でpeaceという関数でコンパイルは通るのですが、EXEが生成できません。 p = peace(p, tmp, ':'); これはどういった理由が考えられますか? 結構はまっています。自作の関数ではないと思うのですが・・・ 環境に依存しているのでしょうか? よろしくお願いします。 以下のようなエラーが出ます。 % !cc cc -o comGetExePath.exe *.o 未定義の 最初に参照している シンボル ファイル peace comGetExePath.o ld: 重大なエラー: シンボル参照エラー。comGetExePath.exe に書き込まれる出力はありません

  • H8/3048で三角関数の使い方について

    H8/3048の三角関数の使い方について質問です。 現在秋月の付属コンパイラを使用しているのですが、 標準ライブラリに三角関数などが無いため使えません。 下記のようなサイトを見つけたのですが、内容が理解出来ません。 何とか使用したいのですが、どの様にすればよろしいでしょうか? 宜しくお願いいたします。 http://www.bblab.com/index.php?H8-3048F%A5%AF%A5%ED%A5%B9%B3%AB%C8%AF%B4%C4%B6%AD#content_1_2

  • 標準ライブラリ関数の自作について質問です。

    C言語初心者の学生です。 標準ライブラリ関数のstrncpyと同じ機能の関数を自作でつくる場合どのようにすれば良いでしょうか。 mystrncpy(char *s1,char *s2,int n) { } かっこの間を埋める形でお願いします。 同じようにstrncat、strnchr、strnstrも答えていただけると幸いです。 すべてではなく4つのうち1つからでも結構ですのでよろしくお願いいたします。