hugDog
Android DevLog
hugDog
전체 방문자
였늘
μ–΄μ œ
  • πŸ™Œ Hello? (162)
    • πŸ§©μ•ˆλ“œλ‘œμ΄λ“œ (12)
      • κ°œλ… 정리 (5)
      • 버그 ν•΄κ²° (4)
      • 기타 (3)
    • πŸ”μ•Œκ³ λ¦¬μ¦˜ (54)
      • κ°œλ… (0)
      • λ°±μ€€ (48)
      • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (6)
    • πŸ“„κ°œλ°œ 일지 (0)
      • FINPO (0)
    • πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (71)
      • C++ 정리 (49)
      • C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ μ—°μŠ΅λ¬Έμ œ (20)
      • Kotlin (2)
    • ⭐Project (1)
    • 🚴TIL (13)
      • Clean Code (13)
    • πŸš©κΈ°νƒ€ (9)
      • λͺ©ν‘œ (6)
      • 일상 (3)
      • λ¬Έμ„œ (0)

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
hugDog

Android DevLog

πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리

C++ 정리 - 27 (정적 쑴속 κΈ°κ°„, λ‚΄λΆ€ 링크, 정적 κΈ°μ–΅ 쑴속 μ‹œκ°„, 링크 μ—†μŒ, κΈ°μ–΅ 곡간 μ œν•œμž, Cv-μ œν•œμž, mutable, const에 λŒ€ν•œ 보좩, ν•¨μˆ˜μ™€ 링크, κΈ°μ–΅ 곡간 ν˜•μ‹κ³Ό 동적 λŒ€μž…)

2020. 10. 28. 21:02
728x90

정적 쑴속 κΈ°κ°„, λ‚΄λΆ€ 링크

μ„œλ‘œ λ‹€λ₯Έ νŒŒμΌμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ λ³€μˆ˜λ“€μ—κ²Œ 같은 이름을 μ‚¬μš©ν•˜λŠ” 법

같은 μ΄λ¦„μœΌλ‘œ μ •μ˜λœ μ™ΈλΆ€ λ³€μˆ˜λ₯Ό ν•˜λ‚˜μ˜ νŒŒμΌμ—μ„œ static μ™ΈλΆ€ λ³€μˆ˜λ‘œ μ„ μ–Έν•œλ‹€λ©΄, static으둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” κ·Έ νŒŒμΌμ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” λ³€μˆ˜λ‘œ μΈμ‹λœλ‹€.

 

정적 κΈ°μ–΅ 쑴속 μ‹œκ°„, 링크 μ—†μŒ

블둝 μ•ˆμ—μ„œ static을 μ‚¬μš©ν•˜λ©΄, static이 μ§€μ—­ λ³€μˆ˜λ₯Ό 정적 κΈ°μ–΅ 쑴속 μ‹œκ°„μ„ κ°–κ²Œ λ§Œλ“ λ‹€. 이런 λ³€μˆ˜λ“€μ€ 블둝 μ•ˆμ—μ„œλ§Œ μ•Œλ €μ§€μ§€λ§Œ κ·Έ 블둝이 ν™œλ™ν•˜μ§€ μ•ŠλŠ” λ™μ•ˆμ—λ„ 계속 μ‘΄μž¬ν•œλ‹€. κ·ΈλŸ¬λ―€λ‘œ 정적 μ§€μ—­ λ³€μˆ˜λŠ” ν•¨μˆ˜μ˜ 호좜과 호좜 μ‚¬μ΄μ—μ„œλ„ κ°’ 보쑴 κ°€λŠ₯

 

κΈ°μ–΅ 곡간 μ œν•œμž

auto(C++11μ—μ„œλŠ” μ œν•œμžμ—μ„œ 빠짐)

register

static

extern

thread_local(C++11μ—μ„œ 좔가됨)

mutable

 

ν•˜λ‚˜μ˜ μ„ μ–Έμ—λŠ” μœ„ λͺ©λ‘μ— μžˆλŠ” μ œν•œμžλ₯Ό ν•˜λ‚˜λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.

κ·ΈλŸ¬λ‚˜ thread_localλ§Œμ€ static λ˜λŠ” externκ³Ό ν•¨κ»˜ μ‚¬μš© κ°€λŠ₯

 

c++11 μ΄μ „μ—λŠ” auto ν‚€μ›Œλ“œλŠ” μ–΄λ–€ λ³€μˆ˜κ°€ μžλ™ λ³€μˆ˜λΌλŠ” 선언에 μ‚¬μš©λ¨, μ΄ν›„μ—λŠ” μžλ™ν˜• λ³€ν™˜μ— μ‚¬μš©

register ν‚€μ›Œλ“œλŠ” λ ˆμ§€μŠ€ν„° κΈ°μ–΅ 곡간을 μ§€μ •ν•˜λŠ” 선언에 μ‚¬μš©λ¨.

c++11μ—μ„œλŠ” μžλ™ λ³€μˆ˜λΌλŠ” 것을 μ˜λ―Έν•˜λŠ” λͺ…μ‹œμ  방법

static ν‚€μ›Œλ“œλŠ” 파일 λ²”μœ„ 선언에 μ‚¬μš©λ  λ•Œ λ‚΄λΆ€ 링크λ₯Ό λ‚˜νƒ€λ‚΄λ©°, μ§€μ—­ 선언에 μ‚¬μš©λ  λ•ŒλŠ” μ§€μ—­ λ³€μˆ˜λ₯Ό μœ„ν•œ 정적 κΈ°μ–΅ 쑴속 μ‹œκ°„μ„ 가리킨닀.

extern ν‚€μ›Œλ“œλŠ” μ°Έμ‘° 선언을 λ‚˜νƒ€λ‚Έλ‹€. κ·Έ 선언은 λ‹€λ₯Έ 곳에 이미 μ •μ˜λ˜μ–΄ μžˆλŠ” λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•œλ‹€.

thread_local ν‚€μ›Œλ“œλŠ” λ³€μˆ˜μ˜ 쑴속 μ‹œκ°„μ΄ λ³€μˆ˜λ₯Ό ν¬ν•¨ν•˜λŠ” μŠ€λ ˆλ“œκ°€ 쑴속 μ‹œκ°„μ΄λ‹€.

 

Cv-μ œν•œμž

const

volatile

 

volatile ν‚€μ›Œλ“œλŠ” ν”„λ‘œκ·Έλž¨ μ½”λ“œκ°€ λ³€κ²½ν•˜μ§€ μ•Šλ”λΌλ„ νŠΉμ • λ©”λͺ¨λ¦¬ μœ„μΉ˜μ— μžˆλŠ” 값이 변경될 수 μžˆλ‹€.

ex) 직렬 ν¬νŠΈλ‘œλΆ€ν„° λ“€μ–΄μ˜€λŠ” μ‹œκ°„μ΄λ‚˜ 정보가 μ €μž₯λ˜μ–΄ μžˆλŠ” ν•˜λ“œμ›¨μ–΄ μœ„μΉ˜λ₯Ό μ§€μ‹œν•˜λŠ” 포인터λ₯Ό κ°€μ§ˆ 경우, ν”„λ‘œκ·Έλž¨μ΄ μ•„λ‹ˆλΌ ν•˜λ“œμ›¨μ–΄κ°€ κ·Έ λ©”λͺ¨λ¦¬μ˜ λ‚΄μš©μ„ λ³€κ²½ν•œλ‹€.

 

mutable

mutable은 νŠΉμ • ꡬ쑰체(λ˜λŠ” 클래슀)κ°€ const둜 μ„ μ–Έλ˜μ–΄ μžˆλ”λΌλ„ νŠΉμ • 멀버λ₯Ό λ³€κ²½ν•  수 μžˆμŒμ„ λ‚˜νƒ€λ‚Έλ‹€.

struct data

{

char name[30];

mutable int accesses;

...

}

const data veep={"Clay cdd",0,...};

strcpy(veep.name,"Joef ef"); //ν—ˆμš© x

veep.accesses++; //ν—ˆμš© o

 

const에 λŒ€ν•œ 보좩

const μ „μ—­ λ³€μˆ˜λŠ” λ‚΄λΆ€ 링크λ₯Ό 갖도둝 λ””ν΄νŠΈλ‘œ λ‚΄μ •λœλ‹€.

const int fingers = 10; //static const int fingers;와 κ°™λ‹€.

 

예λ₯Ό λ“€μ–΄, μ–΄λ–€ 헀더 파일이 μƒμˆ˜λ“€μ˜ 집합을 κ°€μ§€κ³  있고, ν•˜λ‚˜μ˜ 닀쀑 파일 ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” μ—¬λŸ¬ 파일이 κ·Έ 헀더 νŒŒμΌμ„ λͺ¨λ‘ μ‚¬μš©ν•œλ‹€κ³  κ°€μ •. μ „μ²˜λ¦¬κΈ°κ°€ 헀더 파일의 λ‚΄μš©μ„ 각각의 μ†ŒμŠ€ νŒŒμΌμ— ν¬ν•¨μ‹œν‚€κ³  λ‚˜λ©΄, 각 μ†ŒμŠ€νŒŒμΌμ—λŠ” λ‹€μŒκ³Ό 같은 μ •μ˜κ°€ λ“€μ–΄κ°„λ‹€.

const int fingers=10;

const char *warning = "Wak!";

 

λ§Œμ•½ μ „μ—­ const 선언이 λ³΄ν†΅μ˜ λ³€μˆ˜λ“€μ²˜λŸΌ μ™ΈλΆ€ 링크λ₯Ό κ°€μ§€κ³  μžˆλ‹€λ©΄, μ „μ—­ λ³€μˆ˜λŠ” ν•˜λ‚˜μ˜ νŒŒμΌμ—μ„œλ§Œ μ •μ˜λ˜λ―€λ‘œ μ—λŸ¬κ°€ λœλ‹€.(ν•˜λ‚˜μ˜ 파일만이 μœ„μ™€ 같은 선언을 ν•˜κ³  λ‹€λ₯Έ νŒŒμΌλ“€μ€ λͺ¨λ‘ extern ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό 함, extren ν‚€μ›Œλ“œκ°€ μ—†λŠ” μ„ μ–Έλ§Œμ΄ κ°’ μ΄ˆκΈ°ν™” κ°€λŠ₯)

 

extern ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ””ν΄νŠΈλ‘œ λ˜μ–΄μžˆλŠ” λ‚΄λΆ€ 링크λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

extern const states=50;//μ™ΈλΆ€ 링크

이 μƒμˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  νŒŒμΌμ—μ„œ extern ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έν•΄μ•Ό 함.

 

ν•¨μˆ˜μ™€ 링크

λͺ¨λ“  ν•¨μˆ˜λŠ” 정적 κΈ°μ–΅ 쑴속 μ‹œκ°„μ„ κ°€μ§„λ‹€.

ν•¨μˆ˜λŠ” μ™ΈλΆ€ 링크λ₯Ό κ°€μ§„λ‹€. (μ—¬λŸ¬ 파일이 ν•¨μˆ˜λ₯Ό 곡유 κ°€λŠ₯)

ν•¨μˆ˜ μ›ν˜•μ— extern을 μ μš©ν•˜μ—¬ κ·Έ ν•¨μˆ˜κ°€ λ‹€λ₯Έ νŒŒμΌμ— μ •μ˜λ˜μ–΄ μžˆλ‹€λŠ” 것을 λ‚˜νƒ€λ‚Ό 수 μžˆμ§€λ§Œ μ„ νƒμ μž„

static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜μ— λ‚΄λΆ€ 링크 λΆ€μ—¬ κ°€λŠ₯

ν•¨μˆ˜μ˜ μ‚¬μš©λ²”μœ„λ₯Ό ν•˜λ‚˜μ˜ 파일둜 μ œν•œ.

static int private(double x);

...

static int private(double x);

{

...

}

 

κΈ°μ–΅ 곡간 ν˜•μ‹κ³Ό 동적 λŒ€μž…

동적 λ©”λͺ¨λ¦¬λŠ” μ‚¬μš© λ²”μœ„λ‚˜ 링크 κ·œμΉ™μ— μ˜ν•΄μ„œκ°€ μ•„λ‹Œ, new와 delete μ—°μ‚°μžμ— μ˜ν•΄ 닀루어진닀.

κ·ΈλŸ¬λ―€λ‘œ 동적 λ©”λͺ¨λ¦¬λŠ” ν•˜λ‚˜μ˜ ν•¨μˆ˜λ‘œλΆ€ν„° λŒ€μž…λ°›κ³ , λ‹€λ₯Έ ν•¨μˆ˜μ—μ„œ ν•΄μ œ κ°€λŠ₯.

 

κΈ°μ–΅ 곡간 ν˜•μ‹μ΄λΌλŠ” κ°œλ…μ΄ 동적 λ©”λͺ¨λ¦¬μ—λŠ” μ μš©λ˜μ§€ μ•Šμ§€λ§Œ, 동적 λ©”λͺ¨λ¦¬λ₯Ό μΆ”μ ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μžλ™ 및 정적 포인터 λ³€μˆ˜μ—λŠ” μ μš©λœλ‹€.

ex)

float * p_fees = new float[20];

λ©”λͺ¨λ¦¬κ°€ new에 μ˜ν•΄μ„œ λŒ€μž…λ˜κ³ , delete에 μ˜ν•΄ ν•΄μ œλ  λ•ŒκΉŒμ§€ λ©”λͺ¨λ¦¬μ— μœ μ§€λœλ‹€. κ·ΈλŸ¬λ‚˜ p_fees ν¬μΈν„°λŠ” 이 λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ–΄ μžˆλŠ” ν•¨μˆ˜κ°€ μ’…λ£Œλ  λ•Œ 사라진닀. κ·ΈλŸ¬λ―€λ‘œ λŒ€μž…λ°›μ€ λ©”λͺ¨λ¦¬λ₯Ό λ‹€λ₯Έ ν•¨μˆ˜μ—λ„ μ‚¬μš©ν•˜κ³  μ‹ΆμœΌλ©΄, κ·Έ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ₯Ό ν•¨μˆ˜μ— μ „λ‹¬ν•˜κ±°λ‚˜ 리턴해야 함.

 

p_feesλ₯Ό μ™ΈλΆ€ 링크λ₯Ό 갖도둝 μ„ μ–Έν•˜λ©΄, νŒŒμΌμ—μ„œ κ·Έ μ„ μ–Έμ˜ 뒀에 μ˜€λŠ” ν•¨μˆ˜μ—μ„œ p_fees 포인터 μ‚¬μš© κ°€λŠ₯.

extern float *p_fees;

 

 

728x90
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ (μƒˆμ°½μ—΄λ¦Ό)
    'πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • C++ 정리 - 29 (객체와 클래슀, μ ˆμ°¨μ‹ ν”„λ‘œκ·Έλž˜λ°κ³Ό 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°, 좔상화와 클래슀, c++의 클래슀, 클래슀 λ©€λ²„ν•¨μˆ˜μ˜ κ΅¬ν˜„, 인라인 λ©”μ„œλ“œ, 클래슀 μ„ μ–Έμ˜ 일반적인 ν˜•μ‹, 클래슀 생성..
    • C++ 정리 - 28 (new μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ μ΄ˆκΈ°ν™”, μœ„μΉ˜ μ§€μ • new μ—°μ‚°μž, 이름 곡간, using μ„ μ–Έκ³Ό using μ§€μ‹œμž, 이름 곡간에 λŒ€ν•œ 보좩)
    • C++ 정리 - 26 (λΆ„ν•  컴파일,κΈ°μ–΅ 쑴속 μ‹œκ°„, μ‚¬μš©λ²”μœ„, 링크,μžλ™ λ³€μˆ˜,정적 λ³€μˆ˜, 정적 쑴속 μ‹œκ°„, μ™ΈλΆ€ 링크,μ‚¬μš© λ²”μœ„ κ²°μ • μ—°μ‚°μž)
    • C++ 정리 - 25 (ν•¨μˆ˜ ν…œν”Œλ¦Ώ,ν…œν”Œλ¦Ώμ˜ μ˜€λ²„λ‘œλ”©,ν…œν”Œλ¦Ώ μ œν•œ,λͺ…μ‹œμ  νŠΉμˆ˜ν™”,ꡬ체화와 νŠΉμˆ˜ν™”,μ˜€λ²„λ‘œλ”© 뢄석,μ •ν™•ν•œ λŒ€μ‘κ³Ό μ΅œμ„ μ˜ λŒ€μ‘)
    hugDog
    hugDog
    μ•ˆλ“œλ‘œμ΄λ“œ 곡뢀 쀑인 ν•™μƒμž…λ‹ˆλ‹€!

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”