[정보]
C++ namespace를 C에서 흉내내보자
익명(84.17)
2021-01-16 17:34
추천 1
헤더를 만든다
// sample.h
#ifndef SAMPLE_H
#define SAMPLE_H
int sample_func(void);
static const struct {
int (*func
)(void);
} sample
= {
sample_func
};
#endif
sample이 namespace 역할을 할 것이다
C에는 scope resolution operator (::) 가 없기에 .을 쓴다
구현을 다른 파일에 작성한다
// sample.cc
#include "sample.h"
int sample_func(void) {
return 42;
}
구현을 마쳤으니 사용해보자
// main.cc
#include "sample.h"
#include <stdio.h>
int main(void) {
printf("Result: %dn", sample
.func());
return 0;
}
컴파일한다
? clang -c sample.cc
? clang -c main.cc
? clang -o main main.o sample.o
? ./main
Result: 42
성공적이다
static?
객체 메소드 구현도 비슷하지. 근데 함수 포인터 자체가 오버헤드가 있어서 결국에는 안 씀. bearssl도 저런식으로 했는데 걍 보통 함수로 _로 구분지어서 쓰는게 맞음 c는
static이라 파일에 추가할 때마다 복사 비용이 는다는 것도 있어서 실제론 그러는 방법이 낫지
ㅇㅇ 그러니 우리 모두 orthodox c++합시다.
_로 구분하는 게 더 좋은 듯.