λ ν νΌμ μ νκ²½ κ°μ¬λμ Secure & Generic C κ°μλ₯Ό λ£κ³ , μ 리ν λ΄μ©μ λλ€. ν΄λΉ λ΄μ©μ μ μκΆμ μ νκ²½ κ°μ¬λμκ² μμ΅λλ€. Cμ Generic λ°μ΄ν° νμ μ μκ΄μμ΄ νλμ ν¨μλ‘ λμΌν λμμ μννλλ‘ νλ λ°©μμ΄λ€. μλ₯Ό λ€μ΄ μ λ ¬μ νκ³ μ ν λ, λ°μ΄ν° νμ (int, double ...)μ λ°λΌ λ³λλ‘ ν¨μλ₯Ό ꡬμ±νλ€λ©΄ μ μ§λ³΄μ μΈ‘λ©΄μμ μλΉν λΉν¨μ¨μ μΌ κ²μ΄λ€. λ°λΌμ c++μ STLκ³Ό μ μ¬ν κΈ°λ₯μ Cλ‘λ λ§λ€ μ μλ€. μ΄λ»κ² νλ©΄ genericνκ² μ½λλ₯Ό ꡬνν μ μμκΉ? μ΄λ μμ λ€λ£¬ λ€μν ν¬μΈν°μμ `ν¨μ ν¬μΈν°`, `void ν¬μΈν°`μ κ°μ μμ© ν¬μΈν°λ₯Ό νμ©νλ©΄ λ°μ΄ν° νμ μ μκ΄μμ΄ κΈ°λ₯μ μννλ ν¨μλ€μ ꡬνν μ μλ€. Generic for-eac..
λ ν νΌμ μ νκ²½ κ°μ¬λμ Secure & Generic C κ°μλ₯Ό λ£κ³ , μ 리ν λ΄μ©μ λλ€. ν΄λΉ λ΄μ©μ μ μκΆμ μ νκ²½ κ°μ¬λμκ² μμ΅λλ€. 1μ°¨μ ν¬μΈν° int *p, *pp; int arr[5] = {10, 20, 30, 40 ,50}, num = 10; p = arr; //pλ λ°°μ΄λͺ μ λ°μΌλ―λ‘, p[1]κ³Ό κ°μ΄ λ°°μ΄μ²λΌ μ¬μ©κ°λ₯. *(p++)λ κ°λ₯. // index 3μ μ£Όμλ &arr[2], &p[2], (p + 2), (arr + 2), &*&*(arr + 2) pp = # 1μ°¨μ ν¬μΈν°λ νΉμ ν μ£Όμλ₯Ό ν¬μΈνΈ ν μ μλ€. `λ°°μ΄ λͺ `, `ν¨μ λͺ `, `&λ³μλͺ `μ μ£Όμλ₯Ό λνλΈλ€. λ°λΌμ μμ μμ μ½λμ κ°μ΄ ν¬μΈν° λ³μλ₯Ό μ μΈνκ³ λ°°μ΄λͺ μ λμ μ°μ°νκ² λλ©΄ ν¬μΈν° pλ λ°°μ΄..
λ ν νΌμ μ νκ²½ κ°μ¬λμ Secure & Generic C κ°μλ₯Ό λ£κ³ , μ 리ν λ΄μ©μ λλ€. ν΄λΉ λ΄μ©μ μ μκΆμ μ νκ²½ κ°μ¬λμκ² μμ΅λλ€. μμ€ν μ λ°λ₯Έ λ°μ΄ν° νμ μ μ°¨μ΄ μ¬μ©νλ μμ€ν (ARM, POSIX)μ λ°λΌ κ°μ λ°μ΄ν° νμ μ΄λΌκ³ νλλΌλ ν¬κΈ°κ° λ€λ₯Ό μ μλ€. μ΄λ₯Ό μΈμ§νμ§ λͺ»νκ³ μ½λλ₯Ό μμ±νλ€λ©΄ μμΉ μλ κ²°κ³Όλ₯Ό μ΄λνλ€. μλ₯Ό λ€μ΄ 64bit 리λ μ€ μμ€ν μμ μ μ λμνλ μ½λκ° μλμ° 32bitμμλ λμνμ§ μμ μ μλ€. #include int main() { unsigned int a, b; unsigned long c; a = 100000000; b = 1001; c = (unsigned long)a * b; printf("c = %lu\n", c); return 0; }..
λ ν νΌμ μ νκ²½ κ°μ¬λμ Secure & Generic C κ°μλ₯Ό λ£κ³ , μ 리ν λ΄μ©μ λλ€. ν΄λΉ λ΄μ©μ μ μκΆμ μ νκ²½ κ°μ¬λμκ² μμ΅λλ€. μ°μ°μ μ°μ μμ μ°μ°μ μ°μ μμλ₯Ό μμ§ λͺ»νκ³ , μ μ ν νμ©νμ§ λͺ»νλ€λ©΄ μμΉ μλ κ²°κ³Όλ₯Ό μ΄λν μ μλ€. ν¬μΈν°λ₯Ό μ¬μ©νλλΌλ `()`μ λ°λΌ λ€λ₯Έ κ²°κ³Όλ₯Ό λ§λ€κ² λλ€. #include int main() { int *p; int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; p = num; *p++; (*p)++; *++p; ++*p; return 0; } κ°λ¨ν μ½λμ΄μ§λ§ μ°μ°μμ μ°μ μμλ₯Ό λͺ¨λ₯Έλ€λ©΄, μμ μ½λκ° μ΄λ€ κ²°κ³Όλ₯Ό λ°ννκ² λλμ§ μ μ μμ κ²μ΄λ€. `*p++` ν¬μΈν°κ° κ°λ₯΄ν€λ μμΉλ₯Ό 1 μ¦κ°μν¨λ€. μ΄λ `*` 보..
λ ν νΌμ μ νκ²½ κ°μ¬λμ Secure & Generic C κ°μλ₯Ό λ£κ³ , μ 리ν λ΄μ©μ λλ€. ν΄λΉ λ΄μ©μ μ μκΆμ μ νκ²½ κ°μ¬λμκ² μμ΅λλ€. Constant CμΈμ΄μμ μμλ `macro`, `const`, `enum`μΌλ‘ λνλΌ μ μλ€. μ΄ μμ μ μ ν μ¬μ©νμ§ μμΌλ©΄ νΈμμ±μ μ»μ§λ§ μ€λ²ν€λλ₯Ό λ°μμν€κ±°λ, μμΉ μλ κ²°κ³Όλ₯Ό λ§λ€μ΄ λΌ μ μλ€. λ§μ½, `const int size = 3`μ μ¬κ· ν¨μ λ΄μ μ μΈνλ©΄ μ΄λ¨κΉ? ν¨μκ° νΈμΆ λ λλ§λ€ constκ° μ μΈλκ³ ν΄μ λλ―λ‘ μ€λΈν€λκ° λκ² λλ€. λν `switch`μμλ `const`λ₯Ό μ¬μ©ν μ μλ€κ³ λ°°μ΄μμμ κ°μ(index)λ‘λ μ¬μ©ν μ μλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μλ `enum`μ ν΅ν΄ μμλ₯Ό μ μΈνμ¬μΌ νλ€. λͺ μμ κ΄κ³ μ μΈ..
λ ν νΌμ μ νκ²½ κ°μ¬λμ Secure & Generic C κ°μλ₯Ό λ£κ³ , μ 리ν λ΄μ©μ λλ€. ν΄λΉ λ΄μ©μ μ μκΆμ μ νκ²½ κ°μ¬λμκ² μμ΅λλ€. macro function 맀ν¬λ‘ ν¨μλ μ»΄νμΌ μ μ μ μ²λ¦¬κΈ°μ μν΄ ν μ€νΈλ‘ μΉνμ΄ λλ€. λν `argument`μ νμ μ νμ΄ μλ€λ νΉμ§μ κ°μ§κ³ μλ€. μ΄λ‘μ¨ λ§€ν¬λ‘ ν¨μλ νΈλ¦¬ν¨μ μ 곡νμ§λ§, κ°κ³Όν κ²½μ° μ¬λ°λ₯΄μ§ μμ κ²°κ³Όλ₯Ό λ°ννλ―λ‘ μ£Όμνμ¬ μ¬μ©νμ¬μΌ νλ€. Side effect #include #define TEST(X) ((X) * (X)) int main() { int i = 1; int a = TEST(++i); } κ°λ¨νκ² μκ°νμ λ, ν΄λΉ μ½λλ `TEST(X)`μ `++i`κ°μ λμ νλ€λ©΄ 4λΌλ κ°μ΄ λ°νλ κ²μ΄λΌκ³ μκ°νλ€. νμ§λ§..