• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

14.24 복잡한 선언을 해석하는 요령

23.01.23 16:18 작성 23.01.23 16:48 수정 조회수 360

0

작성된 코드문 주석 중, A function cna't return an array 라는 부분이 있고 바로 밑에 이 부분에 대한 예시로 주어진 코드가 int f(int)[]; // Wrong 입니다. 위의 말은 곧 '함수는 배열을 반환할 수 없다'는 것인데, 함수의 반환 자료형이라고 한다면 가장 앞에 붙는 것이지 않나요? 저 코드의 경우 배열을 나타내는 기호가 가장 뒤에 붙어 있는데 어떻게 저와 같은 모양이 '배열에 대한 반환'이 되는 건가요?

 

하나 더 궁금한 것은, typedef는 '다음에 오는 것을 그 다음에 오는 것으로 바꿔서 쓰겠다, ex. typedef xx xxx면 xx를 xxx로 쓰겠다'라는 생각하고 있었는데

typedef int* FCN(void);

typedef FCN* FCN_PTR;

typedef FCN_PTR FCN_PTR_ARRAY[10];

FCN_PTR_ARRAY x3;

이 코드의 세 번째 줄을 보면 'FCN_PTR을 FCN_PTR_ARRAY[10]이라고 바꿔쓰겠다'라고 해석해야 옳지 않나요? 즉 [10]은 배열의 기능을 하는 것이 아닌, 그저 작성된 이름에 불과해야 하지 않나요?

 

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2023.01.24

int f(int)[];이 코드는 편의상 f(int)를 호출했고,

그에 대한 리턴 값이 int형 배열이고,

그를 인덱스를 통해 접근한다면,

그러한 접근이 잘못되었다는 것을 대략적으로 나타내기 위한 코드가 아닐까 싶습니다.

사실 잘못된 예를 설명하기 위한 이해를 돕기 위한 표기이기 때문에

그냥 배열을 반환할 수 없다고만 생각해도 큰 문제는 없지 않을까 싶긴 합니다...

두 번째 질문의 경우,

"바꿔쓰겠다"는 표현이라고 해서 그냥 "문자열 그대로 바뀐다"는 것은 아닙니다.

충분히 []를 통해 elements를 포함할 수 있습니다.

( 전처리기 강의를 참고해보세요 :) )