=== static 함수 === - 해당 파일 내에서만 유효한 함수 {{{~cpp static int func(int a, int b) { ... } }}} === 가변 전달인자 === {{{~cpp #include #include int sum(int n, ...) { int sum = 0; va_list list; va_start(list, n); for(int i = 0 ; i < n ; i++) sum += va_arg(list, int); va_end(list); return sum; } void main() { int s = sum(5, 10, 20, 30, 40, 50); printf("s = %d\n", s); } }}} === 디폴트 전달인자 (C++) === {{{~cpp int func(int a, int b = 10, int c = 30); }}} === 함수의 오버로딩 (C++) === {{{~cpp int abs(int v) { if(v < 0) return -v; else return v; } double abs(double v) { if(v < 0.0) return -v; else return v; } float abs(float v) { if(v < 0.0F) return -v; else return v; } }}} === 템플릿 함수 (C++) === {{{~cpp #include template T abs(T v) { if(v < 0) return -v; else return v; } void main() { int a = abs(-10); printf("%d\n", a); } }}} {{{~cpp #include template T abs(T v) { if(v < 0) return -v; else return v; } void main() { double a = abs(-10); printf("%f\n", a); } }}} {{{~cpp #include template void print(T a) { printf("not supported\n"); } template<> void print(const char *a) { printf("%s\n", a); } template<> void print(int a) { printf("%d\n", a); } void main() { print("adfgasg"); print(121); print(0.23); } }}} === 인라인 함수 (C++) === {{{~cpp #define toupper(a) ((a) >= 'a' && ((a) <= 'z') ? ((a)-('a'-'A')):(a)) vs. inline char toupper( char a ) { return ((a >= 'a' && a <= 'z') ? a-('a'-'A') : a ); } }}} === Linkage 지정 (C++) === {{{~cpp extern "C" void func(int a, int b); extern "C" { void func(int a, int b); } }}} === 함수 포인터 === {{{~cpp int (*fp)(int, int, int); }}} ---- [OurMajorLangIsCAndCPlusPlus]