
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
の書式のところに
#define _GNU_SOURCE
という一文があるのですが、これは何をしているのでしょうか。
#defineはマクロを定義するために使用するのは、
知っています。#define _GNU_SOURCEは _GNU_SOURCE のあとに
何も書かれていないのが不自然です。
No.4ベストアンサー
- 回答日時:
strdupはISO規格の標準関数にはありません。
ただサポートしているコンパイラは結構あるとは思いますが。
この例の場合ですが、
#define _GNU_SOURCE
してから
#include <string.h>
することによって、GNU固有の拡張が有効になります。
つまりこの場合は、strdup (と他)の宣言が有効になります。
フリーソフトウェア徹底活用講座(17)
http://www.cqpub.co.jp/interface/column/freesoft …
GNU コーディング規約: Writing C
http://www.sra.co.jp/wingnut/standards/standards …
あたりにちょっとだけ説明があります。
シンボルとして定義されていればいいので、具体的な値に対して
行っていないのでしょう。
この回答へのお礼
お礼日時:2007/05/05 11:04
全部の回答を見まして、
「GNU固有の拡張が有効にする」ためのものだと判断しました。
2重インクルードを防ぐという目的にも使われることを
知りました。
ご回答いただきました皆様方ありがとうございました。
No.3
- 回答日時:
★あっ、#endif の位置が違った。
サンプル:
/* ヘッダファイルの頭 */
#if !defined( _MY_HEAD_ )
#define _MY_HEAD_
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
/*
関数のプロトタイプ宣言など
(ヘッダの中身を記述)
*/
#endif /* 2重 include 防止対策 */
/* End of my.h */ ←ヘッダファイルの最後
・上記の方が良いね。失礼!
No.2
- 回答日時:
★不自然ではありません。
・確かに #define はマクロや定数を定義しますが、記号定数の場合は『名前』だけ定義することが
できるのです。これを利用することで include ファイルを2重に取り込まなくて良いという方法が
実現できます。便利です。
・次のそのサンプルを載せます。
サンプル:
/* ヘッダファイルの頭 */
#if !defined( _MY_HEAD_ )
#define _MY_HEAD_
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
#endif /* 2重 include 防止対策 */
/*
関数のプロトタイプ宣言など
(ヘッダの中身を記述)
*/
/* End of my.h */ ←ヘッダファイルの最後
解説:
・自作ヘッダに上記のように『#define _MY_HEAD_』とすると最初にインクルードしたときだけ
include 文で stdio.h、stdlib.h、string.h の3つがインクルードされます。
二度、自作ヘッダをインクルードしても既に『_MY_HEAD_』が定義されているため、条件式の
『#if !defined( _MY_HEAD_ )』から『#endif』までがカット(飛ば)されます。
・名前だけの定数を #define で定義することで、このような場面で活用できます。
不自然というよりは慣れですかね。→始めてみたのでしょうね。
・以上。参考に。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するQ&A
- 1 Arduinoで12VフルカラーLEDを調光したい https://www.amazon.co.jp
- 2 http://www.geocities.jp/laprog321/
- 3 #include <iostream> #include <stdio.h> #define N 3
- 4 https://hacknote.jp/archives/26431/ C++勉強中です。vecto
- 5 #include <stdio.h> #define N 3 //the dimension of
- 6 #include <stdio.h> #define N 3 //the dimension of
- 7 こちらのサイトにおいての質問です。 https://www.mk-mode.com/octopres
- 8 #include <iostream> #include <stdio.h> // 元の数定義 #d
- 9 http://www.***.com/goo.htm(仮)
- 10 【#define】 defineで定義した値を配列のサイズに使う事は可能?
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
なぜ、C++の標準ヘッダをインク...
-
5
VC++で文字列から任意の文字を...
-
6
STLで、vectorのファイルへの書...
-
7
makefileでコンパイルしたい
-
8
C言語からgnuplot呼び出し
-
9
C++でのeの近似値の求め方
-
10
#include "fstream.h"
-
11
C++で、環境変数の読み込み方を...
-
12
空ENTERの判別
-
13
C++での <iostream.h>と<iostre...
-
14
ヘッダーファイルがインクルー...
-
15
LinuxのQtに関する質問です。
-
16
string型の固定長文字列を配列...
-
17
組み合わせと順列 アルゴリズム
-
18
enumの値から定義名を文字列化...
-
19
VHDLのvector
-
20
opencvを使って画像比較
おすすめ情報