Integer types refactoring guidelines - minsuk-jang/teamproject GitHub Wiki
λ§μ λ€λ₯Έ μμ μμ μ μ μ νμ refactoring νλ κ²μ΄ νμν©λλ€ :
- λΆνΈκ° μκ±°λ λΆνΈμλ μ νκ³Ό μμμ λ³νμ΄ νΌν©λμ΄ μ€λ₯κ° λ°μνμ§ μλλ‘ νμμμ€.
- μ μ ν κ²½μ° ν¬κΈ° μλ―Έλ₯Ό κ°μ‘°ν©λλ€.
- νλ³ν ν νμμμ΄ `size_t 'κ°μ λ°ννλ μμ€ν ν¨μλ₯Ό μ€μν©λλ€.
- μ°λ¦¬κ° μ‘°μ ν μ μλ κ²λ€μ ν¬κΈ°μ λΆνμν μ νμ΄ λΆκ³Όλμ§ μλλ‘ νμμμ€.
- λͺ μμ νλ³νμΌλ‘ μΈν΄ λ°μ΄ν°κ° μ릴 μ μμ΅λλ€.
- κΈ°ν.
μ΄λ¬ν μ’ λ₯μ refactoringμ μ΄λ»κ² μνν΄μΌ νλμ§μ λμνλ κ²μ΄ μ€μν©λλ€. νλ :
- μμ ν μ³λ€λ νλ κ²μ μ΄λ €μ΄ μΌμ λλ€. λͺ¨λ κ°λ₯ν μν©μ λν΄ κ΅³κ±΄ν κ·μΉ μ§ν©μ μ΄μΈλ¦¬μ§ μμ΅λλ€.
- μ΄ μ§μΉ¨μ μλ‘μ΄ μ¬λλ€μ΄ μ΄λ¬ν λ¬Έμ μ μ§λ©΄ ν μ μλλ‘ λκ³ λ λ§μ κ²½νμ΄μλ μ¬λλ€μ΄ μ½λκ° λμ§νλλλ‘ ν©μλ₯Ό λμΆνκΈ°μν μμΉμ μ립νλ κΈ°λ³Έ νμ΄ λ κ²μ λλ€.
- λ μ΄μ μκ°νμ§ μκ³ μ μ©νλ κ²κ³Ό κ°μ μΌλ ¨μ κΈ°κ³μ μΈ κ·μΉμ΄ λ μλλ μμ΅λλ€.
- λͺ¨λ νΉμ μ¬λ‘λ μ‘°μΉλ₯Ό μ·¨νκΈ° μ μ μ μ€νκ² λΆμν΄μΌ ν©λλ€.
μ¦, μ‘°μΈμ λ€μκ³Ό κ°μ΅λλ€.
-
size_t
μ μλ―Έλ₯Ό μ§λlong_u
-
uint64_t
μ μλ―Έκ° μλlong_u
-
long
μ μλ―Έ:- κ°νΈν μ νμ μ½κ² ν μ μμ΅λλ€. -->
size_t
(μΌλ°μ μΈ λ¬Έμ κ° λ°μνμ§ μλ λ¬Έμ λ₯Ό νμΈνμμμ€.) - λΆνΈκ° μλ λ³νμ΄ μ΄λ ΅λ€. -->
ssize
(μλ₯Ό λ€μ΄, λΉΌκΈ°κ° ν¬ν¨ λ 볡μ‘ν μ½λ)
μ°Έκ³ :ssize
λsrc / nvim / types.h
μ μ μλ νλ‘μ νΈ μ°¨μμ typedefμ λλ€.
- κ°νΈν μ νμ μ½κ² ν μ μμ΅λλ€. -->
- ν¬κΈ° μλ―Έμλ
long
-->int64_t
- ν¬κΈ° μλ―Έλ₯Ό κ°λ
int
:- κ°νΈν μ νμ μ½κ² ν μ μμ΅λλ€. -->
size_t
(μΌλ°μ μΈ λ¬Έμ κ° λ°μνμ§ μλ λ¬Έμ λ₯Ό νμΈνμμμ€.) - λΆνΈκ° μλ λ³νμ΄ μ΄λ ΅λ€. -->
ssize
(μλ₯Ό λ€μ΄, λΉΌκΈ°κ° ν¬ν¨ λ 볡μ‘ν μ½λ)
- κ°νΈν μ νμ μ½κ² ν μ μμ΅λλ€. -->
- ν¬κΈ° μλ―Έμλ
int
-->int
μμ μΌλ°μ μΈ μ‘°μΈμλ λΆκ΅¬νκ³ λ μ격ν νμ΄νμ μ νΈνλ κ²½μ°κ° μμ΅λλ€.
κ°λ₯ν κ²½μ° κ΅¬μ‘°μ²΄λ₯Ό μκ² μ μ§ν΄μΌν©λλ€. λ§μ§λ§κΉμ§:
- κ°λ₯ν κ²½μ° κ³ μ λλΉ μ ν (
int32_t
,uint32_t
λ±)μ μ¬μ©νμμμ€. μ΄κ²μ: - μ§μ λ λλΉκ° νμ μΆ©λΆνλ€λ κ²μ νμ ν μ μλ κ²½μ°μλ§ μννμμμ€. κ·Έλμ:
- νλμ μμ / λΆνμν μ νμ λμ§ λ§μμμ€.
- μ : νλκ° λͺ
νν ν¬κΈ° μλ―Έλ₯Ό κ°μ§κ³ μκ³ νΉλ³ν μ΄μ κ° μμΌλ©΄
size_t
/ssize
λ₯Ό μ¬μ©νμμμ€. νλμ μμ / λΆνμν μ νμ λμ§ λ§μμμ€.
-
μ μ‘ / μ§λ ¬ν λ©μ»€λμ¦μ ν΅ν΄ λ€λ₯Έ νλ‘μΈμ€λ₯Ό μ°κ²°νλ ν¨μμ κ²½μ° κ³ μ ν μ νμ΄ μ νΈλ©λλ€. μλ₯Ό λ€μ΄
msgpack_rpc.h
μμ :
bool msgpack_rpc_integer_result(uint32_t result, msgpack_object *req, msgpack_packer *res);
- κ³΅μ© APIμ ν¨μ λΆλΆμλ κΈ°λ³Έ μ νμ΄ μ νΈλ©λλ€. μλ₯Ό λ€μ΄, κ°μμ `libneovim.h`μμ :
```c
int neovim_get_current_buffer(void);
ꡬ쑰체 νλ, ν¨μ λ§€κ° λ³μ λλ μ μ λ³μκ° λ μ μλ μ λ ₯ λ³μκ° μμΌλ©΄ ν΄λΉ μ νμ λ€λ£¨λ μ½λμμ ν΄λΉ μ νμ κ³λ¨μμΌλ‘ λ°°μ΄ν μ§ λλ λ³΄λ€ μ κ°μ£Όνλ©΄ λ λμ μ νμ μ¬μ©ν μ§ κ²°μ ν΄μΌ ν©λλ€ μ νμ μΈ μλ₯Ό λ€μλ©΄, μΌλ¨ κ³ μ λλΉμ ꡬ쑰체 νλκ° ββμλ€λ©΄, κ·Έκ²μ λ€λ£¨λ μ½λ (ν¨μ λ³μ / λ§€κ° λ³μ)λ κ³ μ ν νμ μ μ¬μ©ν΄μΌ νλ©°, λ€λ₯Έ μ νμΌλ‘ λνμΌ ν μλ μμ΅λλ€. μμΉμ λ€μκ³Ό κ°μ΅λλ€.
- μ λ ₯ λ³μμ λν μ‘μΈμ€κ° μ½κΈ° μ μ©μΈ κ²½μ° κ°μ μν₯ μ‘°μ νκΈ°λ§ νλ©΄ λ€λ₯Έ μ΄μ λ‘ λ μ νΈνλ κ²½μ° λ λμ μ νμ μ¬μ©νλ κ²μ΄ μμ ν©λλ€.
- μ λ ₯ λ³μμ λν μ‘μΈμ€κ° μ½κΈ°/μ°κΈ°κ° κ°λ₯ν κ²½μ° μ€κ° λ³μ/ λ§€κ° λ³μλ κ°λ₯ν ν μ λ ₯ λ³μμ μ νμ μ μ§νλ €κ³ μλν΄μΌ ν©λλ€.
μ°λ¦¬λ thisκ° μ€λ₯κ° λ°μνμ§ μλλ‘ μΈμ¬ν μ£Όμλ₯Ό κΈ°μΈμ΄κ³ μμμ μκ² λμμ΅λλ€. hereμ μ€λͺ λμ΄ μμ΅λλ€. κ·Έλ‘λΆν° κ²°λ‘ μ λ΄λ¦΄ μ μμ΅λλ€.
루νμλ counter λ³μμ limit ννμ΄ μμ΅λλ€ (쑰건μ counterμ limitμ λΉκ΅ μ λλ€.) condition (μ¦, counter λ° limitμ΄ λ€λ₯Έ λΆνΈμ μ νμ κ°μ§ λ)μμ λ€λ₯Έ λΆνΈ μ νμ νΌν©ν λΏλ§ μλλΌ limit ννμ μμμ λ³νμΌλ‘ μΈν΄ μ£Όλ‘ λ¬Έμ κ° λ°μν μ μμ΅λλ€. μμμ λ³ν λ° type-signedness-mixing λ¬Έμ λ₯Ό λ°©μ§νκ³ κ°μμν€κΈ° μν΄μλ λ€μμ μννμμμ€.
- κ°λ₯ν κ²½μ° condition ννμ λ΄μ λ³μμμ λ€λ₯Έ μλͺ μ νμ νΌνμμμ€ (λ§μ μ€λ₯λ λΆνΈ μ νμμ λΆνΈμλ μ νμΌλ‘ μμμ μΌλ‘ λ³νλκΈ° λλ¬Έμ λ°μν©λλ€).
- μμΉμ μΌλ‘, limit expressionμ νμ
μ counterμ νμ
μ κ²°μ ν©λλ€.
limit ννμμ΄
size_t
μΈ κ²½μ° counterλ λ§μ°¬κ°μ§μ λλ€. limit ννμμ΄ssize
μΈ κ²½μ° counterλ λ§μ°¬κ°μ§μ λλ€. λ±λ±. -
counter λ° limitμ κ²°κ³Ό μ νμ΄ λΆνΈκ° μλ κ²½μ° :
- νκ³ κ°μ λν limit ννμμ νμΈνμμμ€ (μ : ν¬κΈ°κ° 0 μΈ κ²½μ°).
- (μ‘°κ±΄μ΄ νμ μμκ° λ μ μμμ μ¦λͺ ν μ μλλ‘ νμ§ μλ ν) substractionμ μ¬μ©νμ¬ conditionμ νΌνμμμ€.
- μ΅μ νλ‘
ssize
λμint
λ₯Ό μ¬μ©νκ±°λsize_t
λμunsigned int
λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ¨, μ΄λ¬ν μ νμ΄ νμ μΆ©λΆν κ²μ΄λΌλ νμ μ΄ μμ΄μΌλ§ μ΅μ ν ν μ μμ΅λλ€. μμ/λΆνμν μ νμ λμ§ λ§μμμ€.