【C言語入門】define(マクロ)の使い方(関数や条件付きマクロも解説)

define(マクロ処理)の 基本から応用まで

あなたはdefineを使ってますか? defineはC言語で自ら定義した文字列を定数や式で置き換える場合に使用します。

この置き換える処理のことをマクロ処理といいます。定数や式を自ら定義しその定義をコードの中でたくさん使う場合には、defineを使ってマクロ処理をしておくと便利です。のちのちに定義を変更したい場合が発生しても、defineを使って定義した箇所を変更するだけで済みます。

この記事ではdefine(マクロ処理)についての基本的なことから、文字列を値や式に置換したり、if definedで条件付きマクロを使うなど応用的な使い方の内容についても解説していきます。

define(マクロ)とは

defineとはプリプロセッサへの指示内容のひとつです。ブリプロセッサとは、コンパイル前に処理を行うプログラムのことです。

コンパイル時の前処理として、マクロ名で指定した文字列を定数や式で置き換えます。この置き換えのことをマクロ置換といいます。

またこの処理のことをマクロ処理といいます。マクロ処理を定義するためにdefineを使用します。

defineで文字列を値に置換

defineは下記のように記述して使用します。

定数について

マクロ名で指定した文字列を定数で置換する方法について説明します。定数には数値や文字列を記述することができます。

定数に置換するマクロ名は一般に全て大文字で記述します。数値を定義したマクロは計算式中で使用することもできます。

文字列を定義したマクロはchar型のポインタへ代入することもできます。それではサンプルコードで確認していきましょう。

実行結果:

このサンプルコードでは、defineを使って数値の定数「PI」と文字列の定数「CIRCLE_RATIO」を定義しています。

数値の定数「PI」を使って計算を行っています。また、文字列の定数「CIRCLE_RATIO」をchar型のポインタ「ptr」に代入しています。

defineで文字列を式に置換

マクロ名で指定した文字列を関数で置換する方法について説明します。

関数の定義について

defineを使って関数を定義することができます。「#define」句の記述の後に関数名と引数を記述し、その後に処理内容を記述します。

関数形式マクロでは引数は型を指定する必要はありません。また戻り値を「return」句で返す必要もありません。

それではサンプルコードで確認していきましょう。

実行結果:

このサンプルコードでは2つの関数をdefineマクロで定義しています。処理内容は「( )」カッコで囲っておいた方が意図しない処理が起こらず安心です。

なお関数の作り方については、こちらのサイトで詳しく説明していますので、こちらを参考にしてください。

【C言語入門】関数の作り方、呼び出し方(宣言、引数、戻り値)
更新日 : 2019年4月24日

複数文からなるマクロ

defineを使って関数を定義する方法について、これまでは1行で定義できるものについて説明しています。複数行の文からなる関数の定義については、do-while文を使用します。

記述方法は下記のとおりになります。

whileの条件はfalse(ゼロ)ですので、do-whileのループは一度だけ実行されます。

それではサンプルコードで確認していきましょう。

実行結果:

このサンプルコードでは、defineを使ってcalc関数を定義しています。

calc関数では2つの処理を記述しているのでdo-while文で囲っています。定義したcalc関数をmain関数内で使用しています。

if definedで条件付きマクロ

前述のdefineで定義したcalc関数のサンプルコードではマクロで別に定義した定数「PI」を使用しています。しかし、定数「PI」が定義された定数であるかどうかを判断してからマクロ関数内で使用する方が望ましいです。

このような場合にif definedを使用します。if definedは下記のように記述します。

それでは、サンプルコードで確認していきましょう。

実行結果:

このサンプルコードでは、if definedを使って定数「PI」が定義された定数かどうか判断しています。判断が正しい場合に定数「PI」を使った処理を行うcalc関数を定義しています。

まとめ

ここでは、defineの使い方について説明しました。定数や式を自ら定義しその定義をコードの中でたくさん使う場合には、defineを使ってマクロ処理をしておくことをオススメします。

のちのちその定義を変更したいときにdefineで定義した箇所だけ変更すれば済むので便利です。使いこなすことができるように、この記事を何度も参考にして下さいね!

C言語カリキュラム無料公開中!

この記事はC言語入門完全攻略ガイド【基礎学習/応用学習/キャリア形成】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習から応用学習、さらにはキャリア形成まで体系的に学べる内容となっています。

C言語学習に必要な情報を一つにまとめていますので効率よくC言語を学ぶことが出来ます。この機会に是非活用していただければと思います。

C言語入門完全攻略ガイド【基礎学習/応用学習/キャリア形成】
更新日 : 2018年5月22日

C言語を最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、C言語を独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

もう挫折したくない
本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、AI(人工知能)や機械学習、IoTについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

C言語ならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta_c2

LINEで送る
Pocket

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説