ãã¹ãŠã®äººã«è¯ãäžæ¥ãïŒ
ãC ++ Developerãã³ãŒã¹ã®äžç°ãšããŠçšæãããèå³æ·±ãèšäºã®ç¿»èš³ãæäŸããŸãã ãªã¹ããŒã ãã§ãªããããªãã«ãšã£ãŠã䟿å©ã§é¢çœããã®ã«ãªãããšãé¡ã£ãŠããŸãã
è¡ãã
å
éšããã³å€éšã³ãã¥ãã±ãŒã·ã§ã³ãšããçšèªã«åºäŒã£ãããšã¯ãããŸããïŒ externããŒã¯ãŒãã®çšéããŸãã¯éçãªå®£èšãã°ããŒãã«ã¹ã³ãŒãã«ã©ã®ããã«åœ±é¿ããããç¥ãããã§ããïŒ æ¬¡ã«ããã®èšäºã¯ããªãã®ããã§ãã
äžèšã§èšãã°ç¿»èš³åäœïŒ.c / .cppïŒãšãã®ãã¹ãŠã®ããããŒãã¡ã€ã«ïŒ.h / .hppïŒã¯ã翻蚳åäœã«å«ãŸããŠããŸãã ãªããžã§ã¯ããŸãã¯é¢æ°ã翻蚳åäœå
ã«å
éšãã€ã³ãã£ã³ã°ãæã£ãŠããå Žåããã®ã·ã³ãã«ã¯ãã®ç¿»èš³åäœå
ã§ã®ã¿ãªã³ã«ãŒã«è¡šç€ºãããŸãã ãªããžã§ã¯ããŸãã¯é¢æ°ã«å€éšãªã³ã±ãŒãžãããå Žåããªã³ã«ãŒã¯ä»ã®ç¿»èš³åäœãåŠçãããšãã«ãããèŠãããšãã§ããŸãã ã°ããŒãã«åå空éã§staticããŒã¯ãŒãã䜿çšãããšãæåã®å
éšãã€ã³ãã£ã³ã°ãæäŸãããŸãã externããŒã¯ãŒãã¯ãå€éšãã€ã³ãã£ã³ã°ãæäŸããŸãã
ããã©ã«ãã®ã³ã³ãã€ã©ã¯ãæåã«æ¬¡ã®ãã€ã³ãã£ã³ã°ãäžããŸãã
- éconstã°ããŒãã«å€æ°-å€éšãã€ã³ãã£ã³ã°ã
- å®æ°ã°ããŒãã«å€æ°-å
éšãã€ã³ãã£ã³ã°ã
- æ©èœ-å€éšãªã³ã¯ã
åºæ¬æåã«ããã€ã³ãã£ã³ã°ã«ã€ããŠèª¬æããããã«å¿
èŠãª2ã€ã®ç°¡åãªæŠå¿µã«ã€ããŠè©±ããŸãããã
- 宣èšãšå®çŸ©ã®éãã
- æŸéãŠãããã
ãŸããååã«æ³šæããŠãã ãããããšãã°ãå€æ°ãŸãã¯é¢æ°ïŒãŸãã¯ã¯ã©ã¹/æ§é äœã䜿çšããŸããããããã«çŠç¹ãåãããŸããïŒã§ãªã³ã«ãåäœãããã³ãŒããšã³ãã£ãã£ãã«ã€ããŠã¯ããã·ã³ãã«ãã®æŠå¿µã䜿çšããŸãã
åç¥å¯Ÿã å®çŸ©å®£èšãšã·ã³ãã«å®çŸ©ã®éãã«ã€ããŠç°¡åã«èª¬æããŸãïŒã¢ããŠã³ã¹ïŒãŸãã¯å®£èšïŒã¯ãç¹å®ã®ã·ã³ãã«ã®ååšã«ã€ããŠã³ã³ãã€ã©ãŒã«éç¥ããæ£ç¢ºãªã¡ã¢ãªã¢ãã¬ã¹ãŸãã¯ã·ã³ãã«ã¹ãã¬ãŒãžãå¿
èŠãšããªãå Žåã«ãã®ã·ã³ãã«ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããŸãã ãã®å®çŸ©ã¯ãé¢æ°ã®æ¬äœã«å«ãŸããŠãããã®ããŸãã¯å€æ°ãå²ãåœãŠãå¿
èŠãããã¡ã¢ãªã®éãã³ã³ãã€ã©ã«äŒããŸãã
ç¶æ³ã«ãã£ãŠã¯ãããšãã°ã¯ã©ã¹ããŒã¿èŠçŽ ã«ãªã³ã¯ãŸãã¯å€ã®åãããïŒã€ãŸãããªã³ã¯ã§ã¯ãªãããã€ã³ã¿ãŒã§ããªãïŒå Žåãã³ã³ãã€ã©ãŒã«ãšã£ãŠå®£èšã ãã§ã¯äžååã§ãã åæã«ã宣èšãããïŒãã ãæªå®çŸ©ã®ïŒåãžã®ãã€ã³ã¿ãŒã¯ããããæãåã«é¢ä¿ãªããäžå®éã®ã¡ã¢ãªïŒ64ãããã·ã¹ãã ã§ã¯8ãã€ããªã©ïŒãå¿
èŠãšãããããèš±å¯ãããŸãã ãã®ãã€ã³ã¿ãŒã§å€ãååŸããã«ã¯ãå®çŸ©ãå¿
èŠã§ãã ãŸããé¢æ°ã宣èšããã«ã¯ããã¹ãŠã®ãã©ã¡ãŒã¿ãŒïŒå€ãåç
§ããŸãã¯ãã€ã³ã¿ãŒã®ãããã«ãã£ãŠååŸããããïŒããã³æ»ãå€ã®åã宣èšããå¿
èŠããããŸãïŒå®çŸ©ã¯ããŸããïŒã æ»ãå€ãšãã©ã¡ãŒã¿ãŒã®ã¿ã€ãã®å€å¥ã¯ãé¢æ°ãå®çŸ©ããããã«ã®ã¿å¿
èŠã§ãã
æ©èœé¢æ°ã®å®çŸ©ãšå®£èšã®éãã¯éåžžã«æçœã§ãã
int f();
å€æ°å€æ°ã§ã¯ãå°ãç°ãªããŸãã 宣èšãšå®çŸ©ã¯éåžžå
±æãããŸããã äž»ãªãã®ã¯æ¬¡ã®ãšããã§ãã
int x;
x
宣èšããã ãã§ãªããå®çŸ©ããŸãã ããã¯ãããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒintã®åŒã³åºãã«ãããã®ã§ãã ïŒC ++ã§ã¯ãJavaãšã¯ç°ãªããåçŽåïŒintãªã©ïŒã®ã³ã³ã¹ãã©ã¯ã¿ã¯ããã©ã«ãã§å€ã0ã«åæåããŸãããäžèšã®äŸã§ã¯ãxã¯ã³ã³ãã€ã©ã«ãã£ãŠå²ãåœãŠãããã¡ã¢ãªã¢ãã¬ã¹ã«ããã¬ããŒãžã«çãããªããŸãïŒã
ãã ãã
extern
ããŒã¯ãŒãã䜿çšããŠãå€æ°å®£èšãšãã®å®çŸ©ãæ瀺çã«åé¢ã§ããŸãã
extern int x;
ãã ãã
extern
ãåæåããŠå®£èšã«è¿œå ãããšãåŒã¯å®çŸ©ã«å€ããã
extern
ããŒã¯ãŒãã¯äœ¿çšã§ããªããªããŸãã
extern int x = 5;
åºåãã¬ãã¥ãŒC ++ã«ã¯ãæåãäºå宣èšãããšããæŠå¿µããããŸãã ããã¯ããã®å®çŸ©ãå¿
èŠãšããªãç¶æ³ã§äœ¿çšããããã«ãã·ã³ãã«ã®ã¿ã€ããšååã宣èšããããšãæå³ããŸãã ãããã£ãŠãæããã«å¿
èŠãªå Žåãé€ãããã£ã©ã¯ã¿ãŒïŒéåžžã¯ããããŒãã¡ã€ã«ïŒã®å®å
šãªå®çŸ©ãå«ããå¿
èŠã¯ãããŸããã ãããã£ãŠãå®çŸ©ãå«ããã¡ã€ã«ãžã®äŸåãæžãããŸãã äž»ãªå©ç¹ã¯ãå®çŸ©ã䜿çšããŠãã¡ã€ã«ãå€æŽãããšãã«ããã®ã·ã³ãã«ãäºåã«å®£èšãããã¡ã€ã«ãåã³ã³ãã€ã«ãå¿
èŠãšããªãããšã§ãïŒã€ãŸãããããå«ãä»ã®ãã¹ãŠã®ãã¡ã€ã«ïŒã
äŸå€ã«ãã
Class
åã®ãªããžã§ã¯ãããšãfã®é¢æ°å®£èšïŒãããã¿ã€ããšåŒã°ããïŒããããšããŸãã
Class
å®çŸ©ãããã«å«ããããšã¯åçŽã§ãã ãããã
f
ã宣èšããã°ãããªã®ã§ãã³ã³ãã€ã©ã«
Class
宣èšãäžããã ãã§ååã§ãã ãããã£ãŠãã³ã³ãã€ã©ãŒã¯ãããã¿ã€ãã«ãã£ãŠé¢æ°ãèªèã§ããclass.hppãªã©ã®
Class
ã®å®çŸ©ãå«ããã¡ã€ã«ã«å¯Ÿããfile.hppã®äŸåé¢ä¿ãåãé€ãããšãã§ããŸãã
file.hppãä»ã®100åã®ãã¡ã€ã«ã«å«ãŸããŠãããšããŸãã ãããŠãclass.hppã®Classã®å®çŸ©ãå€æŽãããšããŸãããã class.hppãfile.hppã«è¿œå ããå Žåãfile.hppããã³ãããå«ã100åã®ãã¡ã€ã«ãã¹ãŠãåã³ã³ãã€ã«ããå¿
èŠããããŸãã Classã®äºå宣èšã®ãããã§ãåã³ã³ãã€ã«ãå¿
èŠãªãã¡ã€ã«ã¯class.hppãšfile.hppã ãã§ãïŒããã«fãå®çŸ©ãããŠãããšä»®å®ïŒã
䜿çšé »åºŠå®£èšãšå®çŸ©ã®éèŠãªéãã¯ãã·ã³ãã«ã¯äœåºŠã宣èšã§ããŸãããäžåºŠããå®çŸ©ã§ããªãããšã§ãã ãã®ãããé¢æ°ãã¯ã©ã¹ãäœåºŠã§ãäºå宣èšã§ããŸãããå®çŸ©ã¯1ã€ã ãã§ãã ããã¯
Rule of One DefinitionãšåŒã°ããŸãã C ++ã§ã¯ã以äžãæ©èœããŸãã
int f(); int f(); int f(); int f(); int f(); int f(); int f() { return 5; }
ãããŠãããã¯æ©èœããŸããïŒ
int f() { return 6; } int f() { return 9; }
æŸéãŠãããããã°ã©ãã¯éåžžãããããŒãã¡ã€ã«ãšå®è£
ãã¡ã€ã«ã䜿çšããŸãã ãã ããã³ã³ãã€ã©ã§ã¯ãªãã翻蚳åäœïŒç¥ããŠç¿»èš³åäœ-TUïŒã§åäœããŸããããã¯ã³ã³ãã€ã«åäœãšãåŒã°ããŸãã ãã®ãããªãŠãããã®å®çŸ©ã¯éåžžã«åçŽã§ã-äºååŠçåŸã«ã³ã³ãã€ã©ã«è»¢éããããã¡ã€ã«ã æ£ç¢ºã«ã¯ãããã¯ã
#ifdef
ããã³
#ifndef
åŒã«äŸåãããœãŒã¹ã³ãŒããããã³ãã¹ãŠã®
#include
ãã¡ã€ã«ã®ã³ããŒã¢ã³ãããŒã¹ããå«ããæ¡åŒµãã¯ãããªããã»ããµã®äœæ¥ã®çµæãšããŠååŸããããã¡ã€ã«ã§ãã
以äžã®ãã¡ã€ã«ãå©çšå¯èœã§ãã
header.hppïŒ
#ifndef HEADER_HPP #define HEADER_HPP #define VALUE 5 #ifndef VALUE struct Foo { private: int ryan; }; #endif int strlen(const char* string); #endif
program.cppïŒ
#include "header.hpp" int strlen(const char* string) { int length = 0; while(string[length]) ++length; return length + VALUE; }
ããªããã»ããµã¯æ¬¡ã®ç¿»èš³åäœãçæããã³ã³ãã€ã©ã«æž¡ããŸãã
int strlen(const char* string); int strlen(const char* string) { int length = 0; while(string[length]) ++length; return length + 5; }
ã³ãã¥ãã±ãŒã·ã§ã³ãºåºæ¬ã«ã€ããŠè©±ãåã£ãåŸãé¢ä¿ãå§ããããšãã§ããŸãã äžè¬ã«ãéä¿¡ã¯ããã¡ã€ã«ãåŠçãããšãã®ãªã³ã«ãŒã®æåã®å¯èŠæ§ã§ãã éä¿¡ã¯ãå€éšãŸãã¯å
éšã®ããããã§ãã
å€éšã³ãã¥ãã±ãŒã·ã§ã³ã·ã³ãã«ïŒå€æ°ãŸãã¯é¢æ°ïŒã«å€éšæ¥ç¶ãããå Žåãä»ã®ãã¡ã€ã«ãããªã³ã«ãŒã«è¡šç€ºãããŸããã€ãŸãããã°ããŒãã«ã«ã衚瀺ããããã¹ãŠã®å€æãŠãããã«ã¢ã¯ã»ã¹ã§ããŸãã ããã¯ã1ã€ã®ç¿»èš³åäœã®ç¹å®ã®å Žæãéåžžã¯å®è£
ãã¡ã€ã«ïŒ.c / .cppïŒã§ãã®ãããªã·ã³ãã«ãå®çŸ©ããå¿
èŠãããããšãæå³ããŸãã ã·ã³ãã«ã®å®£èšãšåæã«ã·ã³ãã«ãåæã«æ±ºå®ããããšããå ŽåããŸãã¯å®£èšçšã®ãã¡ã€ã«ã«å®çŸ©ãé
眮ããå Žåããªã³ã«ãŒãæãããå±éºããããŸãã ãã¡ã€ã«ãè€æ°ã®å®è£
ãã¡ã€ã«ã«è¿œå ããããšãããšãè€æ°ã®ç¿»èš³åäœã«å®çŸ©ãè¿œå ãããŸãâãªã³ã«ãæ³£ããŸãã
Cããã³C ++ã®externããŒã¯ãŒãã¯ãïŒæ瀺çã«ïŒæåã«å€éšãªã³ã¯ãããããšã宣èšããŸãã
extern int x; extern void f(const std::string& argument);
äž¡æ¹ã®ãã£ã©ã¯ã¿ãŒã«å€éšæ¥ç¶ããããŸãã constã°ããŒãã«å€æ°ã«ã¯ããã©ã«ãã§å
éšãã€ã³ãã£ã³ã°ããããéconstã°ããŒãã«å€æ°ã«ã¯å€éšãã€ã³ãã£ã³ã°ãããããšã«æ³šæããŠãã ããã ããã¯ãint x; -extern int xãšåããããã§ããïŒ ããã§ããªãã int x; å®éã«ã¯extern int x {}ã«é¡äŒŒããŠããŸãã ïŒint x以æ¥ãæãäžå¿«ãªæ§æ解æïŒæãåä»ãªæ§æ解æïŒãåé¿ããããã«ããŠãããŒãµã«/ãã©ã±ããåæåæ§æã䜿çšïŒ; 宣èšããã ãã§ãªããxãå®çŸ©ããŸãã ãããã£ãŠãint xã«externãè¿œå ããªãã§ãã ããã globallyã¯ãå€éšå®£èšãããšãã«å€æ°ãå®çŸ©ããã®ãšåããããæªãã§ãïŒ
int x;
æªãäŸfile.hppã§å€éšãªã³ã¯ã䜿çšããŠé¢æ°
f
ã宣èšããããã§å®çŸ©ããŸãã
ãã¹ãŠã®é¢æ°ã¯æ瀺çã«externã§ãããããããã§externãè¿œå ããå¿
èŠã¯ãªãããšã«æ³šæããŠãã ããã 宣èšãšå®çŸ©ã®åé¢ãå¿
èŠãããŸããã 次ã®ããã«æžãçŽããŠã¿ãŸãããã
ãã®ãããªã³ãŒãã¯ããã®èšäºãèªãåããŸãã¯ã¢ã«ã³ãŒã«ãéãç©è³ªïŒã·ãã¢ã³ããŒã«ãªã©ïŒã®åœ±é¿äžã§èªãã åŸã«æžãããšãã§ããŸãã
ãªãããã䟡å€ããªãã®ãèŠãŠã¿ãŸãããã ããã§ãa.cppãšb.cppã®2ã€ã®å®è£
ãã¡ã€ã«ãã§ããŸãããäž¡æ¹ãšãfile.hppã«å«ãŸããŠããŸãã
ã³ã³ãã€ã©ãåäœãããŠãäžèšã®2ã€ã®å®è£
ãã¡ã€ã«ã«å¯ŸããŠ2ã€ã®ç¿»èš³åäœãçæããŸãïŒ
#include
æåéãã³ããŒ/貌ãä»ããæå³ããããšã«
#include
ïŒïŒ
// TU A, from a.cpp int f(int) { return x + 1; } /* ... */
// TU B, from b.cpp int f(int) { return x + 1; } /* ... */
ãã®æç¹ã§ããªã³ã«ãŒãä»å
¥ããŸãïŒã³ã³ãã€ã«åŸã«ãã€ã³ãã£ã³ã°ãçºçããŸãïŒã ãªã³ã«ã¯æå
f
ãåãåããå®çŸ©ãæ¢ããŸãã ä»æ¥åœŒã¯å¹žéã§ããã圌ã¯2人ãèŠã€ããŸããïŒ 1ã€ã¯ç¿»èš³åäœAã«ããã1ã€ã¯Bã«ãããŸãããªã³ã«ãŒã¯å¹žçŠã«ããªãŒãºãã次ã®ããã«è¡šç€ºãããŸãã
duplicate symbol __Z1fv in: /path/to/ao /path/to/bo
ãªã³ã«ã¯ã1ã€ã®
f
æåã«å¯ŸããŠ2ã€ã®å®çŸ©ãèŠã€ããŸãã
f
ã«ã¯å€éšãã€ã³ãã£ã³ã°ããããããAãšBã®äž¡æ¹ãåŠçãããšãã«ãªã³ã«ãŒã«è¡šç€ºãããŸããæããã«ãããã¯1ã€ã®å®çŸ©ã®èŠåã«éåãããšã©ãŒãåŒãèµ·ãããŸãã ããæ£ç¢ºã«ã¯ãããã«ããéè€ã·ã³ãã«ãšã©ãŒãçºçããŸããããã¯ãã·ã³ãã«ã宣èšãããšãã«çºçããããå®çŸ©ãå¿ããæªå®çŸ©ã®ã·ã³ãã«ãšã©ãŒãšåãã§ãã
䜿çšããå€éšå€æ°ã宣èšããæšæºçãªäŸã¯ãã°ããŒãã«å€æ°ã§ãã èªçã±ãŒãã«åãçµãã§ãããšããŸãã ãããããããã°ã©ã ã®ããŸããŸãªéšåã§å©çšã§ããã°ããŒãã«ãªã±ãŒãé¢é£ã®å€æ°ããããŸãã ã±ãŒãã®äžã®é£çšåè·¯ã®ã¯ããã¯åšæ³¢æ°ãèããŠã¿ãŸãããã ãã®å€ã¯ãåœç¶ãã¹ãŠã®ãã§ã³ã¬ãŒããšã¬ã¯ãããã¯ã¹ã®åæåäœã®ããã«ãããŸããŸãªéšåã§å¿
èŠã§ãã ãã®ãããªã°ããŒãã«å€æ°ã宣èšããïŒéªæªãªïŒCã®æ¹æ³ã¯ããã¯ããšããŠã§ãã
#define CLK 1000000
ãã¯ãã«ããããããŠããC ++ããã°ã©ãã¯ãå®éã®ã³ãŒããããé©åã«èšè¿°ã§ããŸãã ããšãã°ãããïŒ
ïŒææ°ã®C ++ããã°ã©ãã¯ãåé¢ãªãã©ã«ã䜿çšããããšæãã§ãããïŒunsigned int clock_rate = 1'000'000;ïŒ
ã€ã³ã¿ãŒãã³ã·ã³ãã«ã«å
éšæ¥ç¶ãããå ŽåãçŸåšã®ç¿»èš³åäœå
ã§ã®ã¿è¡šç€ºãããŸãã å¯èŠæ§ãšãã©ã€ããŒããªã©ã®ã¢ã¯ã»ã¹æš©ãæ··åããªãã§ãã ããã å¯èŠæ§ãšã¯ããªã³ã«ããã®ã·ã³ãã«ã䜿çšã§ããã®ã¯ãã·ã³ãã«ã宣èšããã翻蚳åäœãåŠçãããšãã ãã§ãããåŸã§ïŒå€éšéä¿¡ã®ããã·ã³ãã«ã®å Žåã®ããã«ïŒäœ¿çšã§ããªãããšã§ãã å®éã«ã¯ãããã¯ãããããŒãã¡ã€ã«ã§å
éšãªã³ã¯ãæã€ã·ã³ãã«ã宣èšãããšãã«ããã®ãã¡ã€ã«ãå«ãåãããŒããã£ã¹ããŠãããããã®ã·ã³ãã«ã®äžæã®ã³ããŒãåãåãããšãæå³ããŸãã å翻蚳åäœã§ãã®ãããªåã·ã³ãã«ãäºåå®çŸ©ãããã®ããã«ã ãªããžã§ã¯ãã®å Žåãããã¯ã³ã³ãã€ã©ãŒãå翻蚳åäœã«æåéãå®å
šã«æ°ããäžæã®ã³ããŒãå²ãåœãŠãããšãæå³ããããã¯æããã«é«ãã¡ã¢ãªã³ã¹ãã«ã€ãªããå¯èœæ§ããããŸãã
çžäºæ¥ç¶ãããã·ã³ãã«ã宣èšããã«ã¯ãCããã³C ++ã«staticããŒã¯ãŒããååšããŸãã ãã®äœ¿çšæ³ã¯ãã¯ã©ã¹ããã³é¢æ°ïŒãŸãã¯äžè¬ã«ãä»»æã®ãããã¯ïŒã§ã®éçã®äœ¿çšãšã¯ç°ãªããŸãã
äŸä»¥äžã«äŸã瀺ããŸãã
header.hppïŒ
static int variable = 42;
file1.hppïŒ
void function1();
file2.hppïŒ
void function2();
file1.cppïŒ
#include "header.hpp" void function1() { variable = 10; }
file2.cppïŒ
#include "header.hpp" void function2() { variable = 123; }
main.cppïŒ
#include "header.hpp" #include "file1.hpp" #include "file2.hpp" #include <iostream> auto main() -> int { function1(); function2(); std::cout << variable << std::endl; }
header.hppãå«ãå翻蚳åäœã¯ããã®å
éšæ¥ç¶ã«ãããå€æ°ã®äžæã®ã³ããŒãååŸããŸãã 3ã€ã®ç¿»èš³åäœããããŸãã
- file1.cpp
- file2.cpp
- main.cpp
function1ãåŒã³åºããããšãfile1.cppå€æ°ã®ã³ããŒã¯å€10ãååŸããŸããfunction2ãåŒã³åºããããšãfile2.cppå€æ°ã®ã³ããŒã¯å€123ãååŸããŸãããã ããmain.cppã§è¿ãããå€ã¯å€ãããã42ã®ãŸãŸã§ãã
å¿åã®åå空éC ++ã§ã¯ã1ã€ä»¥äžã®å
éšãªã³ã¯æåã宣èšããå¥ã®æ¹æ³ããããŸãïŒå¿åã®åå空éã ãã®ãããªã¹ããŒã¹ã¯ããã®äžã§å®£èšãããæåãçŸåšã®ç¿»èš³åäœã§ã®ã¿è¡šç€ºãããããšãä¿èšŒããŸãã åºæ¬çã«ãããã¯è€æ°ã®éçæåã宣èšããæ¹æ³ã«ãããŸããã ãã°ããã®éãéçããŒã¯ãŒãã䜿çšããŠå
éšãªã³ã¯æåã宣èšããããšã¯ãå¿åã®åå空éãæ¯æããŠæŸæ£ãããŸããã ãã ããå
éšéä¿¡ã§1ã€ã®å€æ°ãŸãã¯é¢æ°ã宣èšããã®ã䟿å©ãªããã圌ãã¯åã³äœ¿çšãéå§ããŸããã ãã®ä»ã®ããã€ãã®å°ããªéãã«ã€ããŠã¯ãããã§ã¯èª¬æããŸããã
ãããã«ãããããã¯æ¬¡ã®ãšããã§ãã
namespace { int variable = 0; }
ïŒã»ãŒïŒåãããšãè¡ããŸãïŒ
static int variable = 0;
䜿çšããããã§ã¯ãã©ã®ãããªå Žåã«å
éšæ¥ç¶ã䜿çšããŸããïŒ ãªããžã§ã¯ãã«ãããã䜿çšããã®ã¯æªãèãã§ãã å翻蚳åäœã®ã³ããŒã®ããã倧ããªãªããžã§ã¯ãã®ã¡ã¢ãªæ¶è²»ã¯éåžžã«é«ããªãå¯èœæ§ããããŸãã ããããåºæ¬çã«ã¯ãå¥åŠã§äºæž¬äžå¯èœãªåäœãåŒãèµ·ããã ãã§ãã ã·ã³ã°ã«ãã³ïŒ1ã€ã®ã€ã³ã¹ã¿ã³ã¹ã®ã¿ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã¯ã©ã¹ïŒããããçªç¶ãã·ã³ã°ã«ãã³ãã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ïŒå翻蚳åäœã«1ã€ïŒã衚瀺ãããããšãæ³åããŠãã ããã
ãã ããå
éšéä¿¡ã䜿çšããŠã翻蚳ãŠããããããŒã«ã«ãã«ããŒé¢æ°ã®ã°ããŒãã«ãšãªã¢ããé ãããšãã§ããŸãã file1.cppã§äœ¿çšããfooãã«ããŒé¢æ°ãfile1.hppã«ãããšããŸãã åæã«ãfile2.cppã§äœ¿çšãããfile2.hppã®fooé¢æ°ããããŸãã æåã®fooãš2çªç®ã®fooã¯äºãã«ç°ãªããŸãããä»ã®ååãèŠã€ããããšã¯ã§ããŸããã ãããã£ãŠãéçã«å®£èšã§ããŸãã file1.hppãšfile2.hppã®äž¡æ¹ãåã翻蚳åäœã«è¿œå ããªãå Žåãããã«ããfooãäºãã«é衚瀺ã«ãªããŸãã ãããè¡ããªããšãæé»çã«å€éšæ¥ç¶ãè¡ãããæåã®fooã®å®çŸ©ã2çªç®ã®fooã®å®çŸ©ã«ééãã1ã€ã®å®çŸ©ã®èŠåã«éåããããšã«é¢ãããªã³ã«ãŒãšã©ãŒãçºçããŸãã
çµãã
ãã€ã§ãããã«ã³ã¡ã³ãã質åãæ®ãããã
å
¬éæ¥ã«ç§ãã¡ã蚪åããããšãã§ããŸã
ã