CplusplusProject - 0421cjy/cplusplus GitHub Wiki
it's my Experience C++ Project.
this Project following Google C++ Coding Convention.
ν¨μ (Funtions)
- 맀κ°λ³μ μμ
맀κ°λ³μμ μμλ μ λ ₯μμ μΆλ ₯μμΌλ‘ μ μν©λλ€.
C/C++ ν¨μμ νλΌλ―Έν°λ€μ ν¨μμ μ λ ₯μ νκ±°λ ν¨μμμ μΆλ ₯λκ±°λ λλ€ μΌμ μμ΅λλ€. μ λ ₯ νλΌλ―Έν°λ λμ²΄λ‘ κ°μ΄κ±°λ const μ°Έμ‘°λ€ μ λλ€. λ°λ©΄ μΆλ ₯κ³Ό μ /μΆλ ₯ 맀κ°λ³μλ non-constμ λν ν¬μΈν°λ€μ λλ€. ν¨μ 맀κ°λ³μλ₯Ό μ€μΈμμ μμ΄μ λͺ¨λ μ λ ₯ μ μ© λ§€κ°λ³μλ λͺ¨λ μΆλ ₯ 맀κ°λ³μ μμ μμΉμν΅λλ€. νΉν μλ‘μ΄ λ§€κ°λ³μλ₯Ό ν¨μ λμ μΆκ°νμ§ λ§μΈμ. μλ‘μ΄ μ λ ₯ μ μ© νλΌλ―Έν°λ μΆλ ₯ 맀κ°λ³μ μμ μμΉμλλ€. μλλ©΄ μλ‘ μΆκ°λ 맀κ°λ³μμ΄κΈ° λλ¬Έμ λλ€.
μ΄λ μ격ν λ£°μ μλλλ€. μ λ ₯κ³Ό μΆλ ₯ λ λ€μΈ 맀κ°λ³μλΌλ©΄ (λλλ‘ ν΄λΌμ€/ꡬ쑰체) κ΄λ ¨λ ν¨μλ€κ³Όμ μΌκ΄μ±μ μν΄μ μμ κ·μΉμ λ²μ΄λ μ μμ΅λλ€.
- 짧μ ν¨μλ₯Ό μμ±νλΌ
μκ³ λͺ νν ν¨μλ₯Ό μ νΈν©μλ€.
μ°λ¦¬λ λλλ‘ κΈ΄ ν¨μκ° μ μ νλ€λ κ²μ μκ³ μμμΌλ‘, ν¨μμ κΈΈμ΄μ λν μ νμ μ‘΄μ¬νμ§ μμ΅λλ€. νμ§λ§ λ§μ½ ν¨μμ κΈΈμ΄κ° μ½ 40 λΌμΈμ μ΄κ³Όνλ€λ©΄ νλ‘κ·Έλ¨μ ꡬ쑰λ₯Ό ν΄μΉμ§ μμΌλ©΄μ μͺΌκ°€μ μλκ°μ λν΄μ μκ°ν΄λ΄ μλ€.
λΉμ μ΄ μμ±ν κΈ΄ ν¨μκ° μ§κΈμ μλ²½νκ² λμνλ€κ³ ν μ§λΌλ λκ΅°κ° λͺ μ£Όνμ μ΄ ν¨μμ μλ‘μ΄ νλμ μΆκ°ν μ§λ λͺ¨λ¦ λλ€. μ΄λ μ°ΎκΈ° μ΄λ €μ΄ λ²κ·Έλ₯Ό μμ±νλ κ²°κ³Όλ₯Ό μ΄λν μ μμ΅λλ€. ν¨μλ₯Ό μ§§κ³ κ°κ²°νκ² νλ κ²μ΄ λ€λ₯Έ μ¬λλ€μ΄ λΉμ μ μ½λλ₯Ό μ½κ³ μμ νκΈ° μ½κ² λ§λλ λ§λλ κΈΈμ λλ€.
λΉμ μ μΌνλ€κ° κΈΈκ³ λ³΅μ‘ν ν¨μλ₯Ό λ³Όλκ° μμκ²λλ€. κΈ°μ‘΄ μ½λλ₯Ό μμ νλ κ²μ κ²λ΄μ§ λ§μΈμ. λ§μ½ ν¨μμμ κ·Έλ° λλμ λ°μλ€λ©΄ μ΄λ ν΄λΉ ν¨μκ° μ΄λ ΅λ€λ κ²μ λ»ν©λλ€. λ²κ·Έλ₯Ό μ°ΎκΈ° νλ€κ³ μ¬λ¬ λ€λ₯Έ μν©μμ μ‘°κ°μΌλ‘ μ¬μ©νκ³ μΆμλ ν΄λΉ ν¨μλ₯Ό λ μμ μκ³ κ΄λ¦¬ κ°λ₯ν μ‘°κ°λ€λ‘ μͺΌκ°λ κ²μ κ³ λ €ν΄λ³΄μ.
- μ°Έμ‘° 맀κ°λ³μ
μ°Έμ‘°λ‘ λ겨μ§λ λͺ¨λ νλΌλ―Έν°λ€μ λ°λμ constκ° λΆμ΄μμ΄μΌ ν©λλ€.
μ μ:
Cμμ λ³μλ₯Ό μμ ν΄μΌ νλ€λ©΄ ν΄λΉ 맀κ°λ³μλ λ°λμ ν¬μΈν°λ₯Ό μ¬μ©ν΄μΌνμ΅λλ€. νμ§λ§ C++μμ κ·Έ λμ μ μ°Έμ‘° 맀κ°λ³μλ‘ μ μΈν μ μμ΅λλ€.
μ₯μ :
맀κ°λ³μλ₯Ό μ°Έμ‘° λ³μλ‘ μ μΈν¨μΌλ‘ (*pval)++μ κ°μ νμΉν μ½λλ₯Ό νΌν μ μμ΅λλ€. λν λ³΅μ¬ μμ±μμ κ°μ λͺλͺ μ΄ν리μΌμ΄μ μμ νμλ‘ ν©λλ€. ν¬μΈν°μ λ¬λ¦¬ null ν¬μΈν°κ° μ ν¨ν κ°μ΄ μλλΌλ κ²μ λΆλͺ νν©λλ€.
λ¨μ :
μ°Έμ‘°λ ν¬μΈν° μ미체κ³λ₯Ό κ°μ§λ©΄μ κ° κ΅¬λ¬Έμ κ°μ§κΈ°λλ¬Έμ νΌλμ€λ¬μΈμ μμ΅λλ€.
κ²°μ μ¬ν:
ν¨μ 맀κ°λ³μ λͺ©λ‘ λ΄μμ λͺ¨λ μ°Έμ‘°λ constμ¬μΌ ν©λλ€.
void Foo(const string &in, string *out);
μ¬μ€ μ΄λ λ§€μ° μ격ν 컨벀μ μ λλ€. κ΅¬κΈ μ½λμμ μ λ ₯ 맀κ°λ³μλ κ°μ΄κ±°λ const μ°Έμ‘°μ λλ€. λ°λ©΄ μΆλ ₯ 맀κ°λ³μλ ν¬μΈν°μ λλ€. μ λ ₯ 맀κ°λ³μλ μλ§ const ν¬μΈν°κ° λ κ²λλ€. κ·Έλ¬λ μ°λ¦¬λ λΉ const μ°Έμ‘°λ³μλ₯Ό μ λλ‘ νμ©νμ§ μμ΅λλ€. 컨벀μ μ λ°λΌ νμν κ²½μ°λ₯Ό μ μΈνκ³ λ§μ΄μ£ . (μ swap())
νμ§λ§ μλμ κ°μ κ²½μ° μ λ ₯ 맀κ°λ³μμ λν΄μ const T*λ₯Ό μ°λκ²μ΄ const T&λ₯Ό μ°λκ²λ³΄λ€ μ νΈλ μ μμ΅λλ€.
- Nullν¬μΈν°λ₯Ό λκΈ°κ³ μΆμκ²½μ°
- μ λ ₯μ λν΄μ ν¨μκ° ν¬μΈν°λ μ°Έμ‘°λ₯Ό μ μ₯ν κ²½μ°
κΈ°μ΅νμΈμ λλΆλΆμ κ²½μ° μ λ ₯ 맀κ°λ³μλ const T&λ‘ μ§μ λ©λλ€. λμ μ const Tλ₯Ό μ¬μ©ν¨μΌλ‘ λ μλ€μκ² ν΄λΉ μ λ ₯μ λ€λ₯΄κ² μ¬μ©λ¨μ μμν©λλ€. λ§μ½ λΉμ μ΄ κ΅¬μ²΄μ μΈ μ΄μ κ° μλ€λ©΄ const T& λμ μ const Tλ₯Ό μ ννλ€λ©΄ κ·Έλ κ² νμΈμ. κ·Έλ μ§ μμΌλ©΄ μ‘΄μ¬νμ§ μλ μ€λͺ μ μ°Ύκ² λ§λ€μ΄μ νΌλμ λΉ λ릴μ μμ΅λλ€.
- ν¨μ μ€λ²λ‘λ©
λ μκ° νΈμΆ μμΉλ₯Ό λ³΄κ³ μ νν μ΄λ€ μ€λ²λ‘λλ ν¨μκ° νΈμΆλμλμ§ μ νμμμ΄ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ’μ μμ΄λμ΄λ₯Ό μ»μμ μλ κ²½μ°μλ§ μ€λ²λ‘λ©λ ν¨μ(μμ±μλ₯Ό ν¬ν¨ν΄μ)λ₯Ό μ¬μ©νμΈμ.
μ μ:
λΉμ μ μλ§ const string& λ₯Ό λ°λ ν¨μλ₯Ό μμ±ν μ μμ΅λλ€ κ·Έλ¦¬κ³ μ΄λ₯Ό μ€λ²λ‘λ©ν΄μ const char*λ₯Ό λ°λλ‘ ν μ μμ΅λλ€.
class MyClass { public: void Analyze(const string &text); void Analyze(const char *text, size_t textlen); };
μ₯μ :
μ€λ²λ‘λ©μ λμΌνκ² λͺ λͺ λ ν¨μκ° λ€λ₯Έ ν¨μλ₯Ό μν μ μλλ‘ ν¨μΌλ‘ μ½λλ₯Ό λ³΄λ€ μ§κ΄μ μΌλ‘ λ§λ€μ μμ΅λλ€. μ΄λ ν νλ¦Ώνλ μ½λλ₯Ό μν΄μ νμν©λλ€. κ·Έλ¦¬κ³ μ΄λ λ°©λ¬Έμλ€μκ² νΈλ¦¬ν μ μμ΅λλ€.
λ¨μ :
λ§μ½ ν¨μκ° λ§€κ°λ³μ νμ λ§μΌλ‘ μ€λ²λ‘λ© λλ€λ©΄ λ μλ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μκΈ° μν΄μ C++μ 볡μ‘ν μΌμΉ κ·μΉμ μ΄ν΄ν΄μΌν μλ μμ΅λλ€. λν λ§μ½ νμλ ν΄λμ€κ° μ€μ§ ν¨μμ μΌλΆ λ³νλ§ μ¬μ μ νλ κ²½μ° λ§μ μ¬λλ€μ μμμ μλ―Έλ‘ νΌλν©λλ€.
κ²°λ‘ :
λ§μ½ λΉμ μ΄ ν¨μλ₯Ό μ€λ²λ‘λ©νκΈΈ μνλ€λ©΄, Append()λ³΄λ¨ AppendString (), AppendInt ()μ κ°μ μΈμμ λν μ λ³΄λ‘ μ΄λ¦μ νμ νλ κ²μ΄ μ’μ΅λλ€. λ§μ½ κ°λ³ κ°μ 맀κ°λ³μλ₯Ό μ§μνλ ν¨μλ₯Ό μ€λ²λ‘λ©νκ³ μΆμ κ²½μ° μ¬μ©μκ° μ΄λμ λΌμ΄μ λͺ©λ‘μ μ¬μ©νμ¬ μΈμλ₯Ό μ§μ ν μ μλλ‘ std::vectorλ‘ λ§λλ κ²μ κ³ λ €ν΄λ³΄μ.
- λν΄νΈ 맀κ°λ³μ
λν΄νΈ 맀κ°λ³μλ κΈ°λ³Έκ°μ΄ νμ λμΌν κ°μ 보μ₯νλ κ²½μ° λΉ κ°μ ν¨μμΈ κ²½μ°μλ§ νμ©λλ€. ν¨μ μ€λ²λ‘λ©κ³Ό λμΌν μ νμ λ°λ₯΄κ³ κΈ°λ³Έ μΈμλ‘ μ»μ κ°λ μ±μ΄ μλ λ¨μ λ³΄λ€ μ€μνμ§ μμ κ²½μ° μ νΈν©λλ€.
μ₯μ :
μ’ μ’ λν΄νΈ κ°μ μ¬μ©νλ ν¨μκ° μμ§λ§ λλ‘λ κΈ°λ³Έκ°μ μ€λ²λΌμ΄λ© νλ €κ³ ν©λλ€. λν΄νΈ 맀κ°λ³μλ₯Ό μ¬μ©νλ©΄ λλ¬Έ μμΈμ λν΄ λ§μ ν¨μλ₯Ό μ μ μμ΄ μ¬μ΄ λ°©λ²μΌλ‘ κ°λ₯νκ² ν©λλ€. ν¨μμ μ€λ²λ‘λ©κ³Ό λΉκ΅ν λ, λν΄νΈ 맀κ°λ³μλ λ³΄λ€ λͺ νν ꡬ문μ κ°μ§λ©° 'κΈ°λ³Έ'μΈμμ 'μ νμ ' μΈμ μ¬μ΄μ λͺ νν ꡬλΆμ μ 곡ν©λλ€.
λ¨μ :
κΈ°λ³Έ μΈμλ μ€λ²λ‘λ λ ν¨μμ μλ―Έλ₯Ό μ»κΈ°μν λ λ€λ₯Έ λ°©λ²μ΄λ―λ‘ ν¨μ μ€λ²λ‘λκ° λ°μνμ§ μλ λͺ¨λ μ΄μ κ° μ μ©λ©λλ€.
κ°μ ν¨μ νΈμΆμμ μΈμμ κΈ°λ³Έκ°μ λμ κ°μ²΄μ μ μ μ νμ μν΄ κ²°μ λλ©° μ£Όμ΄μ§ ν¨μμ λͺ¨λ μ¬μ μκ° λμΌν κΈ°λ³Έκ°μ μ μΈνλ€λ 보μ₯μ μμ΅λλ€.
κΈ°λ³Έ λ§€κ° λ³μλ κ° νΈμΆ μ¬μ΄νΈμμ μ¬νκ°λμ΄ μμ± λ μ½λλ₯Ό λΆ ν릴 μ μμ΅λλ€. λ μλ λν κ° νΈμΆμμ λ³κ²½λμ§ μκ³ κΈ°λ³Έκ°μμ κ°μ΄ κ³ μ λ κ²μΌλ‘ μμ ν μ μμ΅λλ€.
ν¨μ μκ·Έλμ²λ μ’ μ’ νΈμΆ μκ·Έλμ²μ μΌμΉνμ§ μκΈ° λλ¬Έμ ν¨μ ν¬μΈν°λ κΈ°λ³Έ μΈμκ°μμ λ νΌλ μ€λ½μ΅λλ€. ν¨μ μ€λ²λ‘λλ₯Ό μΆκ°νλ©΄ μ΄λ¬ν λ¬Έμ μ μ νΌν μ μμ΅λλ€.
κ²°λ‘ :
λν΄νΈ 맀κ°λ³μλ κ°μ ν¨μμμ μ λλ‘ μλνμ§ μμ κ²½μ° μ¬μ©νμ§ μμ΅λλ€. κ·Έλ¦¬κ³ μ§μ λ κΈ°λ³Έκ°μ΄ μΆμ μμ μ λ°λΌ λμΌν κ°μΌλ‘ κ³μ°λμ§ μμ κ²½μ° μ¬μ©νμ§ μμ΅λλ€. (μλ₯Ό λ€μ΄ void f (int n = counter ++);λ₯Ό μ°μ§ λ§μμμ€.)
λ€λ₯Έ κ²½μ°μλ λν΄νΈ 맀κ°λ³μκ° μμ λ¨μ μ 극볡 ν μ μλλ‘ ν¨μ μ μΈμ κ°λ μ±μ ν₯μμν¬μ μμΌλ―λ‘ νμ©ν©λλ€. νμ€νμ§ μμ κ²½μ°μλ μ€λ²λ‘λλ₯Ό μ¬μ©νμΈμ