ここから本文です

Arduinoでライブラリを作るときにヘッダーファイルの中に #ifndef Sample_h_ ...

iba********さん

2019/10/707:22:10

Arduinoでライブラリを作るときにヘッダーファイルの中に

#ifndef Sample_h_
#define Sample_h_

int num(int a, int b);

#endif

というような形式になっているようなの

ですが、#ifndefと#endifとは何でしょう?あと、それを書かなくてもコンパイルエラーにはなりません。Sample_h_を適当な名前にしてもエラーにはなりません。

あと、#define もわかりません。
#define LED 13
これくらいしか使わないため教えていただきたいです。

閲覧数:
24
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

せかせかさん

2019/10/711:50:14

>#ifndefと#endifとは何でしょう?
プリプロセッサと呼ばれる、コンパイルの前段階で行われる処理です。

SE学院 C言語 プリプロセッサ
http://itref.fc2web.com/c/preprocessor.html


具体的には、「#ifndef」とは、「#ifndef以降の文字列が#defineされていない場合、#endifまでのコードを追加する」ものです。


複数のライブラリを使う場合、当然ながら複数のヘッダファイルも存在するわけです。複数のヘッダファイル内で同じ文字列を#defineで複数回定義すると、多重定義としてどっちの定義が正しいのか判断できないためコンパイルエラーになります。多重定義を避けるために、すでに定義されているかどうか、を#ifndef文で判断しているのです。


ちなみに#ifndefは「未定義だった場合」で、すごく良く似た#ifdef文というのがあるのですが、こちらは「定義済みだった場合」です。パッと見でとても分かりづらいので、使う場合はどちらかに固定したほうが良いと思います。基本的にはif文なので、#elseも使えます。

  • 質問者

    iba********さん

    2019/10/712:36:39

    >「#ifndef」とは、「#ifndef以降の文字列が#defineされていない場合、#endifまでのコードを追加する」もの
    文字列が#defineされている。とはどういうことを言うのでしょうか?

    あとシンボル名は自由に決めていいのでしょうか?

  • その他の返信(5件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる