質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1244閲覧

headerファイルに必要な文章

reotantan

総合スコア295

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/11/02 14:33

エクリプスでc++のヘッダーファイルをつくると
毎回初期状態で下のコードが記入されています。
このコードの意味と必要性を教えてください

#ifndef PEOPLE_H_ #define PEOPLE_H_ #endif /* PEOPLE_H_ */ ド

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

これはインクルードガードと呼ばれるもので、ヘッダファイルが2重にインクルードされるのを防ぐためにあります。

ヘッダファイルはincludeと書いたところに機械的に展開されるので以下のような場合はvarが2回宣言されてしまいます。
インクルードガードはこれを防ぎます。

C

1// header1.h 2int var;

C

1// header2.h 2#include"header1.h" 3int func(){ 4 printf("this is func.\n"); 5}

C

1// main.c 2#include"header1.h" 3#include"header2.h" 4int main(int argc,char *argv[]){ 5 printf("hoge\n"); 6 func(); 7 return 0; 8}

C

1// includeの展開結果 2/* main.c の header1.hの展開結果 始まり */ 3int var; 4/* main.c の header1.hの展開結果 終わり */ 5 6/* main.c の header2.hの展開結果 始まり */ 7/* header2.h のheader1.hの展開結果 始まり */ 8int var; 9/* header2.h のheader1.hの展開結果 終わり */ 10int func(){ 11 printf("this is func.\n"); 12} 13/* main.c の header2.hの展開結果 終わり */ 14 15int main(int argc,char *argv[]){ 16 printf("hoge\n"); 17 func(); 18 return 0; 19}

投稿2015/11/02 14:48

_nyannyan_

総合スコア124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ヘッダファイルの多重インクルードを抑止するためのものです。
多重インクルードしてしまった場合、マクロの重複や構造体定義の重複となり、コンパイル時にエラーになります。
(マクロの場合は同値であればエラーにはなりませんが)

投稿2015/11/02 14:37

archiver

総合スコア1557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

他の方の回答と同じような回答になりますが、そのコードの意味を併せて回答します。

目的
そのコードの目的は他の方が回答しているとおり「二重インクルードを防ぐ」ためのものです。
二重インクルードしてしまうとどうなるかはShotaKurodaさんの回答のとおりです。

コードの意味
ifndef <定数名>は<定数名>の定数が宣言されていない(Not DEFined)のときにendifまでのコードを実行するものです。
一番最初のインクルードでは定数「PEOPLE_H_」が定義されていないため「PEOPLE_H_」をdefineしたあとにendifまでのコードを読み込みます。
二回目からのインクルードでは「PEOPLE_H_」が定義された環境で読み込まれるので、二重インクルードを防止しています。
以上がそのコードの意味、及び目的です。

投稿2015/11/03 14:25

jimyo

総合スコア243

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問