2020년 6월 14일 일요일

Chap1(함수오버로딩, 매개변수 디폴트, 인라인 함수, 이름공간)

  • 함수 오버로딩 : 함수의 이름은 동일하지만 매개변수의 개수와 자료형이 다른경우 별개의 함수로 구분하는것. (C언어에서는 함수 이름만을 이용하여 호출대상을 찾기때무에 오버로딩을 허용하지 않지만 C++에서는 함수이름과 매개변수 선언을 보고 호출대상을 찾는다)
Ex>


  • 매개변수 디폴트 : 함수의 매개변수값을 기본으로 지정하여, 함수 호출시 매개변수의 인자값이 없을경우 지정된 값으로 설정된다. 주의  함수 선언부에서 설정해야한다. 
Ex>


  • 매크로함수 장/단점
    • 장점 
    1. 일반 함수보다 매크로함수의 실행 속도가 빠르다. 이유는 일반 함수의 경우 함수호출이 일어나면 매개변수나 호출자의 주소를 스택에 저장하는 행위를 하는 반면 매크로함수의 경우 전처리기에서 호출자를 치환해주기때문에 스택에 저장하는 등의 행위를 피할수 있다.
    2. 자료형에 의존적이지 않다. 
    • 단점 
    1. 매크로 함수의 경우 크기가 증가할 수록 괄호를 많이 써야하기때문에 가독성이 떨어진다.
    2. 디버깅이 어렵다.
  • 인라인(inline)함수 
    • 인라인을 직역하면 프로그램 코드라인 안으로 들어가버린 함수
    • 인라인함수는 매크로와 동일한 일을 한다. 단 일반 함수처럼 정의가 가능하다.
    • 매크로 함수는 전처리기에서 처리가 되지만 인라인함수는 컴파일 단계에서 컴파일러에 의해 처리되기때문에 인라인화가 성능에 해가된다고 컴파일러가 판단되면 컴파일러는 인라인 키워드를 무시하기도 하고, 일반 함수가 인라인화하여 성능향상에 도움이 된다고 판단하면 일반 함수로 인라인화 시키지 않아도 컴파일러에 의해 인라인 함수로 취급된다.


  • 이름공간(namespace)
    • 등장배경 : 예를 들어 은행관리 시스템 관리 프로그램을 만드는데 3개의 회사가 참여하였고 프로젝트 규모가 커서 일을 구분하여 독립적으로 진행하기로 했다고 가정하자. 3개의 회사는 각 각 개발을 완료하였고 3개의 회사가 모여 하나의 프로젝트를 완성하는 단계에서 함수의 이름이 동일하여 컴파일 문제가 발생하게 되었다. 이는 협업 과정에서 모든 함수의 이름을 만들때 규칙이 없었기 때문일 수도 있지만 이런 문제가 발생하게 되었을대 이름공간이 문제를 해결할 수 있다.
    • 사용방법은 아래 코드를 참고한다. 
    • 참고로 동일한 이름공간의 함수들은 이름공간의 명시 없이 사용가능하다.


    • 이름공간의 중첩 : 이름공간은 다른 이름공간 안에 삽입될수있다. 


    • using을 이용한 이름공간 명시 : 키워드 using을 이용하면 이름공간을 지정하지 않고도 함수를 호출할 수 있다. 아래 코드에서 main()함수의 using의 선언한 HybFunc()은 함수, 변수 모두 선언이 가능하다. 단, 지역변수 선언과 마찬가지로 지역을 벗어나면 그 효력을 읽게 된다.


    • 이름공간의 별칭 지정 : 이름공간의 중첩과 같이 여러개의 중첩이 일어난 경우 이름에 별칭을 부여할수도 있다.(개인적으로 이건 좀.... 아닌거같다)


    • 범위지정 연산자의 또다른 기능 : 지역변수의 이름과 전역변수의 이름이 동일한 경우 전역변수는 지역변수에 의해 가려지게 된다. 이런경우 전역변수를 사용할수 있게 해주는것이 범위지정 연산자 이다. 


댓글 없음:

댓글 쓰기

VITIS Git + Doxygen Config

 Doxygen Configure 1. Vitis 메뉴의 Window->Preference의 C/C++ -> Editor의 Documentation tool comments 기본 설정값을 Doxygen으로 변경 설정 후 함수 바로 위에서 /...