링커, 로더, 실행 파일
C++ 컴파일러가 함수 이름에 인수 타입 등의 정보를 덧붙여 심볼 이름을 만드는 「이름 장식(맹글링)」의 주된 목적은?
- A함수 이름을 읽을 수 없게 해서 프로그램을 도용당하지 않게 하기 위해
- B함수 이름을 짧게 해서 실행 파일을 작게 하기 위해
- C같은 이름이지만 인수 타입이 다른 함수(오버로드)나 네임스페이스를 링커가 구별할 수 있게 하기 위해
정답과 해설 보기
정답: C. 같은 이름이지만 인수 타입이 다른 함수(오버로드)나 네임스페이스를 링커가 구별할 수 있게 하기 위해
링커는 심볼을 이름 문자열만으로 대조합니다. C++에서는 「print(int)」와 「print(double)」처럼 같은 이름의 함수를 만들 수 있으므로 그대로는 구별할 수 없습니다. 그래서 컴파일러는 「_Z5printi」처럼 인수 타입 등을 이름에 집어넣습니다. C 언어의 함수는 장식되지 않으므로, C++에서 C 함수를 호출할 때는 「extern "C"」를 붙여 장식을 하지 않게 합니다.
- A. 보호를 위한 것이 아닙니다.
- B. 오히려 이름은 길어집니다.
- C. 올바릅니다. 링커는 이름만으로 대조하기 때문입니다.