Profile

ys2310

Author:ys2310
2008年春にNew York Cityにあるふる〜い大学を卒業。


Categories


new postings


new comments


new trackbacks


monthly archeive


FC2ブログ 転職
DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
| BLOG TOP |
DATE: CATEGORY:C/C++ macro
C標準規格で、の中で定義することを要求されているマクロは四つです。すなわち、errno、EDOM、ERANGE、およびEILSEQです。このうち、errnoを除く三つはエラーの状態を表す正の整数値に定義します。値は勝手に決めてもよいのですが、一応Cygwinに合わせて

#define EDOM 33
#define ERANGE 34
#define EILSEQ 138

としておきます。

この三つのマクロはさまざまな演算関数がエラー時にerrno に格納するマクロです。
よく覚えてください
。詳しくは次回紹介します。

さて、肝心のerrnoですが、最も簡単な実装は、int型の外部変数にすることです。シングルタスクの環境であればこれで十分ですが、マルチタスクの場合にはいろいろ厄介な問題がついて回ります。

errno 以外にも、strtokやasctimeなど、静的変数をアプリケーションに参照させるタイプのものは、排他制御だけではマルチタスク対応になりません。タスクごとに、それぞれ異なる記憶域を設けて、実行中のタスクに応じた記憶域を参照させなければならないからです。

タスクに対して局所的な記憶域の扱いは、後ほどまとめて対応することにし、とりあえず現時点では最小限の実装にとどめておきます。ただし、ヘッダ自体はこれでフィックスしたいので、errnoの実体を関数呼び出しにしておきます。

#ifdef __cplusplus
extern "C"
#endif
int *__errno(void);

#define errno (*__errno())

関数__errnoの定義は、現段階では

int *__errno(void)
{
static int e;
return &e;
}

とするにとどめておきます。

[Quote]:http://209.85.165.104/search?q=cache:V7mqKb4_VasJ:libc.blog47.fc2.com/blog-date-200601.html+__ONLY_C_LOCALE&hl=en&ct=clnk&cd=1&gl=us&lr=lang_en|lang_ja&client=firefox-a

| BLOG TOP |
DATE: CATEGORY:C/C++ macro
C言語には(すくなくとも、ANSI C標準には)組み込みマクロが用意されています
これは、最初から定義されているマクロです

組み込みマクロは、コンパイラによっては特有のマクロが追加されていたりするかもしれません
ここでは、ANSI C標準が定める組み込みマクロを紹介します

○__FILE__と__LINE__
__FILE__は、現在コンパイルしているファイルの名前を表します。 __LINE__は、現在コンパイルしている行の行番号を表します。

__FILE__ は文字列、__LINE__は正数値になります。

printf("%s %d",__FILE__, __LINE__);

○__DATE__と__TIME__
__DATE__は、現在の日付を、__TIME__は、現在の時刻を表します。

__DATE__は「年 月 日」の形式で、__TIME__は「時:分:秒」の形式です。

どちらも文字列定数として扱います。

printf("%s %s",__DATE__, __TIME__);

○__STDC__
__STDC__は、コンパイラが規格に準拠しているかどうかを調べます。規格に準拠していれば1になります。準拠していない場合には、そもそもこのマクロが定義されていません。

注意すべきは、このマクロが定義されていたとしても、そのコンパイラが完全な形で規格に準拠できているとは限らないということです。

よって、このマクロを完全に当てにしてはいけません。(使い道があまりない)

最後に、事前定義マクロもマクロなので、#ifdefで定義されているかどうかを調べられます。ただし、#undefによって無効化することはできません

[Quote]:http://wisdom.sakura.ne.jp/programming/c/c40.html
http://www.geocities.jp/ky_webid/c/053.html

| BLOG TOP |

copyright © Manhattan life all rights reserved.Powered by FC2ブログ