C言語のatexit()関数を検証するサンプルプログラム
atexit()は、プログラムの終了時に呼び出される関数を事前に登録しておくための標準ライブラリ関数です。終了時の後処理(リソースの解放やログの出力など)を行いたい場合に便利な機能です。
この関数はstdlib.hヘッダーファイルに定義されており、使用するにはプログラムの先頭でインクルードする必要があります。
atexit()関数の基本的な仕組み
atexit()に登録された関数は、LIFO(後入れ先出し)の順序で呼び出されます。つまり、最後に登録した関数が最初に実行されます。登録できる関数の数は処理系によって異なりますが、C標準では最低32個まで登録できることが保証されています。
例1: 基本的な使い方
#include<stdio.h>
#include<stdlib.h>
void welcome(void){
printf("Welcome to New,");
}
void world(void){
printf("World\n");
}
int main(){
// atexit のテスト:ユーザー定義関数を呼び出す
atexit(world);
atexit(welcome);
return 0;
}出力結果
Welcome to New,World
この例では、worldが先に、welcomeが後に登録されています。そのため、プログラム終了時には逆順に呼び出され、「Welcome to New,」→「World」の順に出力されます。
例2: 登録順序と実行順序の確認
#include<stdio.h>
#include<stdlib.h>
void first(void){
printf("This is a beautiful,");
}
void second(void){
printf("Wonderful life\n");
}
int main(){
// atexit のテスト:ユーザー定義関数を呼び出す
atexit(second);
atexit(first);
return 0;
}出力結果
This is a beautiful,Wonderful life
ここでも同様に、second→firstの順で登録していますが、実行は逆順の「first → second」となるため、文章として自然な順序で表示されます。
まとめ
- atexit()はstdlib.hで提供される関数登録用のAPIである
- 登録された関数はmain()のreturn後、プログラム終了時に自動的に呼び出される
- 複数登録した場合はLIFO(後入れ先出し)順で実行される
- 引数なし・戻り値なし(void)の関数のみ登録可能
-
【初心者向け】C言語で二次方程式の根(解)を求めるプログラムの作り方
問題ソフトウェア開発の手法をC言語に適用し、二次方程式の根(解)を求めるプログラムを作成します。解決策二次方程式 ax2 + bx + c = 0 の根を求めます。二次方程式には必ず2つの根が存在します。分析入力:係数 a、b、c の値出力:根 r1、r2 の値手順(解の公式)二次方程式の根は、以下の「解の公式」によって求めることができます。$r_{1}=\frac{-b+\sqrt{b^2-4ac}}{2a}$$r_{2}=\frac{-b-\sqrt{b^2-4ac}}{2a}$ここで、b2 − 4ac を判別式と呼びます。判別式の値によって、根の性質が次のように変わります。判別式 >
-
C言語で点がX軸またはY軸に平行かどうかを判定するプログラム
グラフ上に与えられた n 個の点について、その点群がX軸に平行なのか、Y軸に平行なのか、それともどちらの軸にも平行でないのかを判定する方法を解説します。グラフとは、直角に交わる2つの軸に沿って測定した2つの変数の関係を表す図のことです。「平行」とは、線と線の間隔がどこでも等しい状態を指し、鉄道の線路のように、2本の線がすべての地点で同じ距離を保っている関係をいいます。 つまりここで求めたいのは、「各点の座標と軸との位置関係がすべての点で揃っているかどうか」、すなわち点群がX軸またはY軸に対して平行に並んでいるかどうかという判定です。 軸とは何か グラフはX軸とY軸という2つの軸によって構成さ