-
C/C++におけるexit()関数と_Exit()関数の違いを徹底解説
exit()関数とは exit()関数は、呼び出し元のプログラムを即座に終了させ、それ以降の処理を実行せずに終了させるために使用されます。exit()が呼び出されるとプロセスは終了し、C++では静的な記憶域期間を持つオブジェクトのデストラクタ呼び出しなど、登録済みの後処理が実行されます。この関数はC言語では「stdlib.h」ヘッダーファイル内で宣言されており、戻り値はありません。 exit()の構文は以下の通りです。 void exit(int status_value); 各引数の意味は次の通りです。 status_value − 親プロセスへ返される終了ステータスの値です。 exit(
-
C/C++のポインタとは?基本構文と使い方を実例付きで解説
ポインタとは、他の変数のアドレス(メモリ上の場所)を格納するための特殊な変数です。変数にメモリが割り当てられると、その変数の先頭アドレスをポインタが指し示すことになります。C言語およびC++では、単項演算子「*(アスタリスク)」を使ってポインタ変数を宣言します。 ポインタの基本構文 ポインタ変数は、以下のような形式で宣言します。 データ型 *変数名; 各要素の意味は次のとおりです。 データ型 … ポインタが指し示す変数の型です。int、char、float などが該当します。 変数名 … プログラマが自由に決められるポインタ変数の名前です。 たとえば、int 型の値を指すポインタなら in
-
C言語の配列へのポインタとは?基本構文とサンプルコードをわかりやすく解説
ポインタの基本ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための変数です。変数にメモリが割り当てられると、ポインタはその変数のアドレスを指します。ポインタ変数の宣言には単項演算子「*」が使用され、これにより割り当てられたメモリのアドレスを扱えるようになります。配列へのポインタは、配列変数が占めるメモリブロックの先頭アドレスを指します。配列ポインタの構文配列ポインタは、次の構文で宣言します。datatype *variable_name[size];各要素の意味は以下のとおりです。datatype − int、char、float など、変数のデータ型を指定します。variabl
-
C言語で変数名を出力する方法を解説!マクロと文字列化演算子の使い方
C言語では、プリプロセッサの文字列化演算子(#)を活用したマクロを定義することで、変数名を文字列として出力できます。ここでは、その具体的な方法をサンプルコード付きで解説します。サンプルコード#include <stdio.h> #define VariableName(name) #name int main() { int name; char ch; printf(The variable name : %s, VariableName
-
C言語における多次元配列の初期化方法を徹底解説
配列とは、同じ型の要素が連続したメモリ領域に順番に格納されたデータの集合です。先頭の要素には最も小さいアドレスが割り当てられ、末尾の要素には最も大きいアドレスが割り当てられます。配列のインデックスは 0 から始まり、配列サイズ - 1 で終わる点に注意しましょう。また、配列のサイズは必ず 0 より大きい整数である必要があります。配列のインデックスとサイズの関係具体的な例で確認してみましょう。配列サイズ = 10 の場合 最初のインデックス = 0 最後のインデックス = 配列サイズ - 1 = 10 - 1 = 9多次元配列とは多次元配列とは、いわば「配列の配列」のことです。データは表形式(行
-
【C言語】可変長配列(VLA)の初期化方法を実例付きで解説
可変長配列(VLA)とは 可変長配列(Variable Length Array:VLA)とは、その長さがコンパイル時ではなく実行時に決定される配列のことです。従来のC言語では、配列のサイズはコンパイル時に定数で指定する必要がありましたが、VLAを使えば、ユーザーの入力や計算結果など、実行時に初めて判明する値をそのまま配列のサイズとして指定できます。 この機能は、数値計算アルゴリズムのプログラミングを大幅に簡素化できるため非常に便利です。可変長配列は、C99と呼ばれるC言語の標準規格で正式にサポートされました。 サンプルプログラム 以下は、C言語で可変長配列を使用する例を示したプログラムです
-
C/C++で第3の変数を使わずに2つの変数の値を交換する方法
はじめに 通常、C言語やC++で2つの変数の値を交換(スワップ)する際には、一時的な第3の変数が必要になります。しかし、算術演算を工夫することで、第3の変数を一切使わずに値を交換することも可能です。 以下は、その手法を用いたサンプルプログラムです。 サンプルコード #include <stdio.h> int main() { int a,b; printf(Enter the value of a : ); scanf(%d, &a); printf(\nEnter the value of b : ); scanf(%d, &am
-
C/C++でグローバル変数と静的変数がデフォルト値(0)で初期化される理由
グローバル変数や静的(static)変数がデフォルト値である「0」で自動的に初期化されるのは、CおよびC++の標準規格でそのように定められているためです。コンパイル時にゼロで初期化しておく処理はほぼ無償で行えるため、実行時のパフォーマンスへの影響もありません。また、静的変数とグローバル変数は、生成されるオブジェクトコード上ではまったく同じように扱われます。これらの変数は実行ファイル内の.bssセクションに配置されます。.bssセクションは、明示的に初期化されていないデータを格納するための領域であり、プログラムのロード時にOSがメモリを割り当ててゼロクリアします。この仕組みにより、実行ファイルの
-
C/C++で算術演算子を使わずに2つの整数の合計を求める方法
算術演算子(+、-、*、/ など)を使用せずに2つの整数を加算したい場合、ビット演算を活用する方法があります。AND演算で繰り上がりを検出し、XOR演算で部分和を求めるという手法を組み合わせることで、加算を実現できます。以下に具体的な実装例を示します。サンプルコード#include <iostream> #include <cmath> using namespace std; int add(int val1, int val2) { while(val2 != 0) { int c = val1 & val2; val
-
C/C++の前置インクリメント(++i)と後置インクリメント(i++)の違いをわかりやすく解説
プログラミングにおいて、インクリメント演算子は変数の値を1つ増やすために使われ、逆にデクリメント演算子は値を1つ減らすために使用されます。C言語およびC++では、これらの演算子にはそれぞれ「前置」と「後置」の2つの書き方があり、値が評価されるタイミングが異なる点が重要なポイントです。 前置インクリメント(++i)とは 前置インクリメント(++i)では、変数の値を式の中で使用する前に、値が1つ増やされます。つまり、増加後の値が変数に反映された状態で処理が行われます。 後置インクリメント(i++)とは 後置インクリメント(i++)では、変数の現在の値を式の中で使用した後に、値が1つ増やされます。つ
-
C/C++の静的変数はメモリのどこに格納される?データセグメントとBSSセグメントを解説
静的変数(static変数)とは、プログラムが実行されている間ずっとメモリ上に存在し続ける変数のことです。つまり、その寿命(ライフタイム)はプログラム全体の実行期間と同じになります。これは自動変数(ローカル変数)とは大きく異なる点です。自動変数は、その関数が実行されている間だけメモリ上に存在し、関数の処理が終了すると破棄されます。静的変数が格納されるメモリ領域静的変数は、メモリのデータセグメントに格納されます。データセグメントとは、プログラムの仮想アドレス空間の一部を指します。さらに、静的変数は初期化の有無によって、以下の2つの領域に分けられます。1. 未初期化データセグメント(BSSセグメン
-
g++とgccの違いとは?LinuxにおけるC・C++コンパイラの使い分けを解説
Linux環境でC言語やC++のプログラムをコンパイルする際によく使われるのが、GNUコンパイラコレクションに含まれる「gcc」と「g++」です。どちらも同じGCC(GNU Compiler Collection)ファミリーに属しますが、扱う言語やリンク時の挙動が異なります。本記事では、それぞれの特徴と基本的な使い方を具体例とともに解説します。 g++とは g++はGNU C++ Compilerのことで、Linux上でC++プログラムをコンパイルするために使用されるコンパイラです。拡張子が「.c」のファイルであっても「.cpp」のファイルであっても、どちらもC++のソースコードとして扱ってコ
-
printfでsize_t型の値を出力する正しい方法とは?(C/C++)
C言語・C++において、size_t 型の変数を printf で出力する際には、書式指定子 「%zu」 を使うのが正しい方法です。%d を使って size_t 型の変数を出力しても、多くの場合エラーは表示されません。しかし、これは環境によっては誤動作や未定義動作につながる可能性があり、移植性の観点からも推奨されません。size_t 型に対応した正しい書式指定子は %zu です。「%zu」のそれぞれの文字には次のような意味があります。z:長さ修飾子(length modifier)。引数が size_t 型であることを示します。u:符号なし10進整数型(unsigned)への変換を表します。サ
-
C/C++におけるexternキーワードの使い方を徹底解説
externキーワードとは 外部変数は「グローバル変数」とも呼ばれます。これらの変数は関数の外側で定義され、プログラムの実行中はどこからでもアクセス可能です。C/C++では、「extern」キーワードを使って外部変数を宣言・定義します。 また、「extern C」という記述は、C言語で実装・コンパイルされた関数をC++側で宣言するために使用されます。これにより、C++のコードからC言語のライブラリをそのまま利用できるようになります。C++では関数名マングリング(name mangling)が行われるため、C言語と同じリンケージを持たせる目的でもこの指定が重要です。 externの基本構文 ex
-
C/C++における参照とポインタの違いと使い分け
参照変数(Reference)とは 参照変数とは、すでに存在する変数につける「別名(エイリアス)」のことです。参照は一度ある変数に結び付くと、後から別の変数を参照するよう変更することはできません。また、宣言時に必ず初期化する必要があり、NULL(何も参照しない状態)にすることもできません。参照変数を宣言するには、演算子「&」を使用します。 参照変数の構文 datatype variable_name; // 変数の宣言 datatype& refer_var = variable_name; // 参照変数の宣言 各要素の意味は次の通りです。 datatype − int、char、
-
C/C++で配列の長さを求める方法|sizeof演算子とポインタ演算の使い方
C言語やC++で配列の長さ(要素数)を取得するには、いくつかの方法があります。本記事では、代表的な2つの手法——sizeof演算子を使う方法とポインタ演算を使う方法——について、サンプルコードと実行結果付きでわかりやすく解説します。 方法1:sizeof演算子を使う sizeof() 演算子を使うと、配列全体のサイズをバイト単位で取得できます。配列全体のサイズを、配列の1要素あたりのサイズで割ることで、配列の長さ(要素数)を求めることができます。以下はC++での使用例です。 サンプルコード #include <iostream> using namespace std; int
-
C・C++のgoto文とは?基本構文とサンプルコードでわかりやすく解説
goto文は、プログラムの制御を「goto」の位置から指定したラベルの位置へ一気にジャンプさせるジャンプ文の一種です。しかし、goto文を使うとプログラムの流れが複雑になり、コードの可読性や保守性が大きく低下するため、一般的には使用が推奨されていません。 goto文の基本構文 goto文の基本的な書式は以下のとおりです。 goto ラベル名; . . . ラベル名: 実行する文; 「goto」の後にジャンプ先のラベル名を指定します。プログラムの実行がgoto文に到達すると、同じ関数内にある対応するラベルの位置へ制御が移ります。 goto文のサンプルプログラム ここで、C++でgoto文
-
C言語におけるグローバル変数と静的変数の初期化方法をわかりやすく解説
C言語では、グローバル変数と静的変数(static変数)は必ず定数値で初期化する必要があります。これは、これらの変数が静的記憶域期間(static storage duration)を持つため、プログラムの実行開始前、つまりmain()関数が呼び出される前に値が確定していなければならないからです。もし定数値以外(変数や関数の戻り値など)で初期化しようとすると、コンパイル時にエラーが発生します。正しい初期化のサンプルコード以下は、グローバル変数と静的変数を定数で初期化するプログラムの例です。#include <stdio.h> int a = 5; static int b = 10
-
C言語で変数を定数として宣言する方法|constキーワードと#defineの使い方
C言語では、constキーワードまたは#defineプリプロセッサディレクティブを使用することで、変数を定数として宣言できます。本記事では、それぞれの方法について具体例を交えながら詳しく解説します。 constキーワードによる定数宣言 変数のデータ型の前に「const」キーワードを付けることで、その変数を定数として宣言できます。const付きの変数に値を代入(初期化)できるのは一度だけであり、以降は変更できません。また、初期化しなかった場合のデフォルト値は0になります。 以下は、constキーワードを使ってC言語で定数変数を宣言するプログラムの例です。 コード例 #include <st
-
C/C++で変数名が数字で始められない理由を解説
C/C++において、変数名には英字・数字・アンダースコア(_)を使用することができます。C/C++言語にはあらかじめ定義されたキーワード(予約語)が存在し、それ以外の名前はすべて識別子として扱われます。識別子とは、変数や定数、関数などに付ける名前のことです。しかし、識別子を数字で始めることはできません。これには技術的な理由があります。コンパイラは以下の7つのフェーズ(段階)を通じてソースコードを処理します。字句解析(Lexical Analysis)構文解析(Syntax Analysis)意味解析(Semantic Analysis)中間コード生成(Intermediate Code Gen