#ifndefの使い方


ヘッダの中の#ifndef、これはとても重要なものです.例えば、あなたは2つのCファイルを持っていて、この2つのCファイルはすべて同じヘッダファイルをincludeしました.コンパイル時、この2つのCファイルは一緒に実行可能なファイルにコンパイルされ、問題が発生し、大量の宣言が衝突した. 
やはりヘッダーファイルの内容を#ifndefと#endifに入れましょう.あなたのヘッダーファイルが複数のファイルに引用されるかどうかにかかわらず、これを追加します.一般的なフォーマットは次のとおりです.
#ifndef<識別>
#define
...... 
...... 
#endif 
<識別子>は理論的には自由に命名できるが、各ヘッダファイルのこの「識別子」は一意であるべきである.標識の命名規則は一般的にヘッダファイル名が大文字で、前後に下線を引き、ファイル名の「.」下線にもなります.例えば、stdio.h 
#ifndef _stdIO_H_ 
#define _stdIO_H_ 
...... 
#endif 
2.ifndefで変数が発生する問題を定義します(一般的にはifndefでは定義されません).
#ifndef AAA
#define AAA
...
int i;
...
#endif
変数定義があります
vcにリンクするとiが定義を繰り返すエラーが発生し、cでコンパイルに成功します.
結論:
(1).最初にこの頭を使ったときcppファイル生成.objの場合、int iは、これを別のものとして使用することを定義する.cppは再び[単独]生成する.objの場合、int iはまた定義され、2つのobjは別のものとなる.cppもincludeというヘッダを接続すると、繰り返し定義が現れる.
(2).ソースファイルの拡張子を変更する.c後,VCはC++ではなくC言語の構文に従ってソースプログラムをコンパイルする.C言語では,複数のint iに遭遇すると,そのうちの1つが定義であり,他は宣言であると自動的に認識される.
(3).C言語とC++言語の接続結果は異なり、コンパイル時にC++言語がグローバルになる可能性がある
変数のデフォルトは強い記号なので、接続エラーが発生しました.C言語は初期化するか否かによって強弱の判断を行う.(参考)
解決方法:
(1).ソースファイルの拡張子を変更する.c.
(2).推奨ソリューション:
.hではextern int iのみを宣言する.はい.cppで定義

#ifndef __X_H__
#define __X_H__
extern int i;
#endif//__X_H__

int i;
注意問題:変数は一般的に定義しない.hファイルにあります.
私のhファイル:
//  NSObject_Constants.h
//  httpDemo
//
//  Created by     on 12-8-28.
//  Copyright (c) 2012  yangxiaolong. All rights reserved.
//

//#import <Foundation/Foundation.h>	


//    :
#ifndef _CONSTANTS_H_
#define _CONSTANTS_H_







#define tartgetlistUrl @"http://192.168.1.4:6401/?from=android"
#define NUMBER 23




//static NSString *  const  targetList = @"http://192.168.1.4:6401/?from=android";
//static const int numb = 5;






#endif