C++ 함수 포인터를 쓰는 예. 이거 난이도가 얼마나 되나요?

  • #3760501
    h856 76.***.207.158 456

    사실 아주 간단한 프로그램인데도 머리를 아주 쥐어 트는군요. 난 역시 천재가 아니야.
    솔직히 typedef 를 이런식으로 쓰는게 프로그램 가독성을 더 좋게 해주는지 동의가 전혀 안되네요. 이거 풀어서 이해하는것도 쉽지 않은데 말이죠.
    혹시 이거 typedef 안쓰는게 가독성이 더 낫지 않을까요? 난이도가 상당히 높은 편에 속할거 같은데….이거 typedef 를 안쓰고 다음 프로그램을 풀어낼줄 아는 사람이 시뿔뿔 쓰는 사람.배운 사람중에 얼마나 많을지도 궁금하네. 답은 나중에 댓글봐서 올릴수도…

    #include <iostream>
    using namespace std;
    typedef int (*ptr)(int*);
    typedef ptr (*pm)(); //

    int fun1(int* y)
    {
    cout << “hello!!” << endl;
    return *y + 10;
    }

    ptr fun()
    {
    cout << “Hello “;
    return &fun1;
    }

    int main()
    {
    int a = 10;
    pm u = fun;
    cout << (*u())(&a) << endl;

    return 0;
    }

    • 독거노인 172.***.75.219

      질문 잘했데이
      여기가 마 퐁퐁이 개발자
      본진인기라
      좀 있으면 퐁퐁이들 와서
      도와 줄거레이 ㅎㅎ

    • ㅁㄴㅇㄹ 24.***.143.98

      제 밑에 사람이 저딴식으로 이상한 typedef 쓰면 한대 치고 싶을듯.

      • ㄷㅂ 76.***.207.158

        ㅋㅋㅋ
        제대로 쓴 겁니다. 함수포인터를 에이리어스로 쓸때는 간단한 함수라도 저런식으로밖에 못써요. 보통때 보던것과는 완전 다른 형태죠. 근데 첫번째건 그런데로 다른예에서도 많이 쓰이는데 두번째거 저건 한번 더 꼬였어.

    • 지나가다 174.***.132.230

      야, 너 대깨문은 아니지?

    • ㅁㄴㅇㄹ 24.***.143.98

      Overhead가 있긴 한데 std::function<int (int*)> 라는 대안도 있고 이름을 ptr / pm 이런으로 짓는 것도 별로고…

      • ㄷㅂ 76.***.207.158

        원문예를 typedef 을 써서 하든 std::function 이나 using 을 써서하는게 더 코딩하기가 쉬운거 같나요? 아니면 그냥 저런거 필요없이 냅다 함수포인터로 직접 코딩하는게 더 쉬울까요? 경험이 많아지고 저 방법에 익숙해지게 되면 저 방법이 더 쉬울거 같아 보이기도 하는데…

    • 1 192.***.203.80

      원글 코드는 두번을 꼬아 놓은 것이라
      해석하는데 시간이 걸리기에 좋은 코드 아닙니다.

      남들(부사수 등)이 읽기 쉬워야 코드향샹/변경이
      쉽습니다.

      • ㄷㅂ 76.***.207.158

        사실 저렇게 쓰면 읽기에는 깔끔한건 사실입니다. 한번 typedf 없이 직접 함수 포인터들로 한번 풀어써 보실수 있나요?

      • ㄷㅂ 76.***.207.158

        그리고 두번 꼬고 싶어서 일부러 꼬아놓은게 아닐거 같고, 문제의 특성상, fun 함수가 fun1 함수를 내부에서 이용하고 또 그 fun 함수를 u 라는 함수로 이용하다보니까, 함수가 두단계 깊이로 계층을 이루고 있으니 어느 모로나 복잡해질수밖에 없는 구조입니다.

    • ion 172.***.97.225

      C++의 요소는 iostream include한 것 밖에 안 보이네요.
      std::function으로 쉽게 할 수 있는데 왜 함수 포인터를…

      혹은 C++로 interface 클래스나 Abstracr class를 사용하면 될텐데….

      C++의 장점을 사용 안 한 코드이네요…

    • ion 172.***.97.225

      SOLID principle은 한번 제대로 읽어보세요. Design Pattern도 관심 있으시면 보시고요.
      저렇게 코드 작성하면 협업이 안 돼요.

      GitHub에 보면 NVIDIA나 Google에서 공개한 좋은 코드도 많으니 그거 보고 공부 좀 하시면 좋을듯 해요.

      아. Coding Style 문서들도 보세요.

    • ion 172.***.97.225

      함수 안에서 또 함수를 굳이 참고하고 싶으시면 lambda expression도 보시기를요…

    • CodingBot 174.***.178.248

      제가 알기로는 거진 50고개 한참 넘으신 분이고 딱히 이쪽 분야에서 일하시는 분도 아닌데 코딩에 관심이 많으신거 같네요. 취미라면 모를까나 코드를 간결하고 이해하기 쉽게 쓰는건 철칙입니다. 가독성은 원글님이 읽기 쉽다고 판단하는게 아니라 협업하는 팀원들이 결정하는 것이지요.

      “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” – Martin Fowler

      어쨌든 적지 않은 나이에 왕성한 지적 호기심을 보이시는게 존경스럽습니다. 윗분들이 추천한 것 처럼 design pattern 레퍼런스나 하다못해 udemy코스라도 몇달 투자해보시는걸 추천드립니다.

      • ee 76.***.207.158

        이 자슥 너 스토커냐? 내가 20대건 50대건 70대건 니가 뭔 상관여 이 미**ㅅ꺄. 혼자 요리조리 데이드리밍하며 시간낭비 많이할 타입이나 이넘.
        하던거 하는데 뭐가 그리 놀랍냐? 시뿔뿔 발명자는 지금 70이냐 80이냐 그런데로 활동하는데… 근데 나 솔직히 박사논문쓸때 맨날 컴퓨터앞에서 코딩하느라 너무 스트레스받고 뒤꼴이 많이 땡겼던 경험을 했어서 그 이후로 코딩하는 거 그다지 좋아하지 않는다.

        나이먹어갈수록 새로운걸 배우는게 어렵지 하던거 하는건 대단한건 아니다. 그게 뭐든지 간에.

    • ㄷㅂ 76.***.207.158

      SOLID principle…Design Pattern…. 함 봐야겠네요. 프로그램을 돌아가게 하는데에만 급급해서 주로 써왔었기 때문에 디자인관점에서는 별로 공부하거나 생각해본적이 없네요. Coding Style 문서들 도 볼 생각을 전혀 해본적도 없고요. 그런것까지 관심이 미치지 않아서… 그런걸 실제로 많이 읽어가면서 하는 사람들이 꽤 있나보군요 (하긴 아카데미아와는 달리 큰 회사에서 서로 협업을 많이 해야 하는 경우에는 스타일 가이드라든가 이런게 아주 중요해지겠군요. ). 어떤 메뉴얼이든지, 메뉴얼같은거 질려서 사전에서 단어찾아 보듯이 필요한것들 여기저기서 뽑아서 쓰지 그런거 한번도 전체적으로 읽어본적이 없어서….근데 사실 지름길을 제시하는 중요한 포인트인데 내가 그런걸 무시했던거 같군요. 그런데 한 언어에 대한 스타일 가이드가 모든 회사들에 적용되기에는 일관되지 않을수 있는경우도 있을듯한데…구글이 인더스트리의 표준이 되어버린건가?

    • ion 172.***.96.14

      C++의 경우 우선 아래 두 문서 정독을 추천드립니다.

      https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines

      https://google.github.io/styleguide/cppguide.html

      GitHub 내에 오픈소스 프로젝트들 보시면 코딩 스타일을 다 정하고 시작하는데 이런것도 보시면 좋습니다.

      Scott Myers의 Effective C++과 Effective Modern C++도 추천드립니다.

      • ㄷㅂ 76.***.207.158

        예 한번 읽어보지요. 링크 감사합니다.

    • ㄸㄹㅇ 73.***.58.27

      참 한심하다. 성격이 뭐 이리 모가났을까? 조금만 맘에 안들면 쌍욕네 비아냥에 진짜 이 영감님은 심각한 인격장애인듯. 그러니 애들까지 문제가 생기지

    • ㄷㅂ 76.***.207.158

      영자야.
      스토킹은 범죄다. 스토커 철저히 관리 처단해라.
      그리고 영자 너도 기준도 없이 니 맘대로 댓글 삭제하는 행위 영자로서 너 잘못하는짓이다. 스토커들이 거짓덧씌워 중상모략 인신공격하는 행위는 그대로 방관하는 짓이 잘하는 짓이냐? 그나저나 스토커들이 왜 쓸데없는 쓰레기 정보들에 저렇게 목을 메는지 참 정말 대깨문 스토커들 쓰레기답다. 쓰레기정보에 거짓덧씌워 중상모략 거짓선동이나 하고…하여간 대깨문들 하는짓들 진짜 드럽다. c++ 논하는학술 방 까지 쳐들어와서 저래야 하나? c++ 하는거랑 나이랑 도대체 무슨 상관이라고 저런 미친소릴 쳐한단 말이냐 도대체. 지들이 내 나이나 알아? 나에 대해 암것도 모르는 넘들이 ㅋㅋㅋ

      앞으로는 학술을 논할때는 제발 대깨문 스토커들 무단 침입하지 마라. 무단침입해서 나이가 어떻다느니 가족관계가 어떻다느니 누가 마약을 했더라든지…그런 상관도없는 소설들 좀 들이대지 말란 말이다. 난 소셜네트워크도 안하는 사람이다. 니들 대깨문들이 내 정보 알아냈다고 착각해서(ㅋㅋㅋ) 중상모략하고 인신공격하려는 짓 다 부질없는 짓이다.

    • ㄸㄹㅇ 73.***.58.27

      ㅋㅋㅋ 역시나. 할배 무슨 과대망상에 피해망상있어? 아무도 보잘것 없는 할배에 관심 줄 사람 단연코 없어. 그냥 넌 지나가는 John doe #123 그 이상도 그 이하도 아니야. 근데 아무리 익명이라도 아이피 주소는 남어. 여기 있는 사람들이 할배 처럼 붕어라서 뒤돌아서면 다까묵는줄 알어? 아니지. Brad처럼 익명게시판에서 대놓고 네임드화 하지 않아도 할배 처럼 몇년간 꾸준히 뻘글 올리면 다 각인이된다고. 아이피는 일종의 foot print야. 하기사 할배는 자기가 쓴 글 기억도 못하겠지. 아참 치매 초기 증상이 급격한 성격변화라더라. 딱 할배같은데 가서 병원 검사해. 돈 얼마 안들어. 내 베프가 md라 치매는 초기 진단이 중요하데 ㅋㅋㅋㅋㅋㅋㅋ

      다시 강조하는데 넌 그냥 성질 더럽고 인격 삐뚫어진 늙은이야. 아무도 너따위 관심도 없고 다만 못된 늙은이로 각인되어있을뿐. 스토커는 너야. 혹시 할배 키보드에 대깨문이라는 단축키 있어? 뭔 말끝마다 대깨문이냐? ㅋㅋㅋㅋㅋㅋ 그 뭐냐 너 유명한 액읔보수인가 그거야?

      죄송합니다 영자님. 앞으로 순화해서 댓글 올리겠습니당

      • ㄷㅂ 76.***.207.158

        니들 대깨문들 도대체 아이큐 얼마냐? 77 ? 지들이 대깨문이라는 부정은 또 절대 못해, 교주에 대한 충성심은 참 대단혀 ㅋㅋㅋ

        얼마나 몽충하면 저렇게 대깨문짓하며 필터링된 아이피 조각이라도 구글링하며 스토커짓할까? 너같은 몽충한 대깨문들이나 필터링된 세자리밖에 없는 아이피 구글링한다. 그짓하는게 바로 정신병자야. ㅋㅋㅋ 그래서 니들이 정신병자라는거야. 아이큐3자리가 못되니 아이피3자리에 집착증이 있지.
        내가 싼 똥들이 맛도 좋고 영양까는 있을것이다. 계속 그 똥 빨아먹으러 찾아다녀라. 그러다보면 뭔가 배우는게 있겠지 ㅉㅉ 도대체 가정교육이 어떤 환경에서 자랐길래 저렇게 남의 똥이나 빨아먹는 넘팽이들로 자라났을까.

        • ㄸㄹㅇ 73.***.58.27

          아따 영감님 사람 어질어질하게 하는구만유. 다시말하지만 전 쭈글쭈글 영감님께서 뭘 하는지 그걸 또 수고스럽게 구글링할만큼 한가하지 않아요. 그 시간에 겐신 임팩트 몹이나 잡지 ㅋㅋ
          하도 영감 아이피로 어그로 끄는 글이 많아서 기억에 남는다고요. 마약라는지 안하는지 아는 사람 손? 혹은 지난번에 올린 시뿔뿔 그 얼척없는 글까지.

          아 맞다…. 나 지금 붕어랑 대화중이었지 ㅋㅋㅋㅋㅋㅋㅋ
          이 댓글 아래 댓글 다시고 정신승리 2023하소서 ㅋ