C++ General: What are the differences between inline functions and macros?

Tags:

C++ General: What are the differences between inline functions and macros?

trax님 집에서 보고.
케케 묵은 이야기라는데 저는 항상 까먹으니;;;;;;

솔직히 inline 을 쓰는게 더 낫다, inline자체도 매우 단순한 메소드가 아니면 억지로 쓰려고 해서는 안된다 (outlined inline 이 될경우 머리가 아프니)정도 밖에 모름..

p.s. Acclerated C++, Java Puzzler 샀습니다. 흐흐. 기대중.

Comments

3 responses to “C++ General: What are the differences between inline functions and macros?”

  1. 공성식 Avatar
    공성식

    요즘 시대에 C/C++을 보면 너무 기계 중심적 프로그래밍 언어라는 느낌이 듭니다. inline이라든가 volatile 같은 것들은 사실 사람보다는 기계를 위한 개념들이고 기계가 어떻게 작동하는지를 제대로 이해하기 전에는 잘 활용할 수 없는 것들인 것 같아요. 그래서 혹자는 C/C++을 General Programming Language가 아니라 von Neuman이 설계한 아키텍쳐를 위한 언어라고 하더군요. 반면에 Lisp는 정말 General Programming Language 라고 하구요. Lisp는 원래 어떤 특정 아키텍쳐를 고려하지 않고 만든 추상적 언어이니까요.

    요즘 Refactoring에선 inline을 extract의 반대 개념으로 사용하더군요. 현실적으로는 inlining보다는 extracting에 더 신경써야 할 것 같아요. inlining이 코드의 효율성을 위한 것이라면 extracting은 코드의 재활용성/가독성/우아함 등을 위한 것이니까요.

  2. MKSeo Avatar
    MKSeo

    전 C/C++은 거의 한계가 없는 언어라고 생각해요. 특히 C++말이죠. 비록 C++ 사용자 내부에서도 반발은 있지만 C++의 템플릿 메타 프로그래밍이나 boost의 MPL 등을 보면 C++은 정말 못하는게 없는 언어죠.

    다만 문제는 언어가 너무 드럽게 어려워서 – Matz가 말했듯이, 5년을 전문가로 일하고 난뒤에서 C++ has been surprising 라고 말할 수 밖에 없는 언어 – 문제지만요. 사실 고속의 잘짜여진 애플리케이션을 위한 프로그램 언어에 C++만한 것이 있을까요. 전 자바를 나름 한다고 생각하지만 자바는 아니죠. Ruby 도 아니고.

    어느정도 타협점을 찾는 언어가 C++인 듯해요.

  3. 공성식 Avatar
    공성식

    >>전 C/C++은 거의 한계가 없는 언어라고 생각해요.
    Assembly도 마찬가지죠…:-)

    >>사실 고속의 잘짜여진 애플리케이션을 위한 프로그램 언어에 C++만한 것이 있을까요.
    Object Pascal(Delphi), Objective-C (대부분의 맥용 어플리케이션)
    이 두가지 모두 C++과 동일한 성능을 내면서 훨씬 깔끔한 구조의 언어라고 생각합니다.
    다만 앞으로는 주류는 역시 자바나 루비 스타일이죠.
    정적 타입 언어는 자바에서 절정에 이르렀다고 생각합니다. (C#은 사실상 자바랑 동일하구요)
    정적 타입의 언어들이 더 발전할 만한 게 있을가요?
    전 아니라고 생각합니다.
    앞으로는 루비처럼 동적 언어들이 점점 비중이 높아질 것 같아요.

    >>어느정도 타협점을 찾는 언어가 C++인 듯해요.
    저는 이 타협점을 찾은 언어가 자바라 생각합니다.
    요즘의 기준으로 봤을 때 C++은 기계쪽에 치우친 언어라고 볼 수 있죠.
    반면에 루비는 사람쪽에 치우친 언어이구요.
    자바는 그 중간쯤…

    ——————

    C++이 강력한 언어라는 점에서는 부인할 수가 없죠.
    Simple과 Powerful(Performance) 중 어느 한 가지만을 가지고 있는 경우는 흔합니다만, 그 두 가지를 모두 가지고 있는 경우는 흔치 않은 것 같아요.
    다만 요즘은 컴퓨터 성능이 좋아져서 Simple에 비해 Powerful의 비중이 점점 줄어들고 있는 추세입니다만…

    C++은 멀티-패러다임이라는 점이 가장 큰 문제라고 생각합니다.
    C와 거의 완벽하게 호환되면서 객체지향, 템플릿 등을 추가하다보니 너무 방대해져 버렸죠.
    마치 어느 순간 공룡처럼 스스로의 덩치를 이기지 못하고 무너질 것 같아 보입니다.
    Bjarne Stroustrup조차도 C++이 가지고 있는 이러한 문제점 때문에 요즘엔 언어 자체보다도 그것을 제대로 사용하는 방법에 대해 많이 얘기하고 있더군요.
    (즉, WHAT보다는 HOW)
    대부분의 사람들이 C++로 프로그래밍하면서도 C스타일로 하고 있다는 점을 특히 지적하고 있구요.
    또한 multiple inheritance의 문제점 때문에 클래스를 만들 땐 아예 abstract class를 따로 만들어 인터페이스를 구분할 것을 주장합니다.
    자바의 interface가 multiple inheritance보다 더 좋은 방법이라는 걸 간접적으로 표현하는 것 아닐까요?
    이밖에도 GC 등의 결여는 역시 언어의 나이를 보여주는 것이라 생각해요.

    그렇지만 저도, 프로그래머라면 Programming in C/C++은 아니더라도 Thinking in C/C++ 의 자세를 기본적으로 가지고 있어야 한다고 생각합니다.
    그래야만 프로그램이 어떻게 돌아가는지를 제대로 이해할 수 있으니까요.

Leave a Reply

Your email address will not be published. Required fields are marked *