C & C++/디딤돌 C언어

명명법과 형식 정리하기

언휴 2024. 1. 9. 08:52

21. 명명법

C언어에서는 변수 이름, 함수 이름, 사용자 정의 형식의 태그 이름 등을 개발자가 정할 수 있어요.
C언어에서는 개발자가 정하는 이름은 다음 규칙을 따라야 하죠.

  •  예약어를 사용할 수 없음
  • 첫 문자로 숫자 문자를 사용할 수 없음
  • 언더 바를 제외한 기호 문자를 사용할 수 없음
  • 같은 블록 내에 같은 이름을 선언할 수 없음

참고로 예전에는 한글로 이름을 정할 수 없었는데 지금은 한글로 정할 수 있어요. 

프로그래밍을 할 때 이름을 대충 정하면 생각이 나지 않아 확인하는 비용도 들어요.
여러 개발자가 같이 개발할 때는 이러한 문제로 예상하지 못한 비용이 추가로 발생하곤 하죠.
많은 개발자들은 서로 이해하기 쉽게 나름의 규칙을 정하여 이름을 결정하고 있어요.

이 책에서는 다음과 같은 규칙으로 이름을 결정할게요. (따라야 하는 규칙이 아닙니다.)

  • 변수 이름: 명사, 대문자를 사용하지 않음 (stdudent)
  • 형식 이름: 명사, 첫자와 의미가 있는 부분은 대문자, 나머지는 소문자 (Stdudent)
  • 함수 이름: 동사, 첫자와 의미가 바뀌는 부분은 대문자, 나머지는 소문자 (Study), 라이브러리 함수처럼 일반적으로 사용 가능한 함수는 소문자로만 정의
  • 매크로 :명사, 소문자를 사용하지 않음(MAX_STUDENT)

다음은 이 책에서 사용하는 명명법을 보여주는 코드예요.
아직 다루지 않은 문법들도 포함하고 있지만 코드의 내용은 큰 의미를 갖고 있지 않아요.
또한 개발자에 따라 명명하는 방법은 차이가 있을 수 있어요.
대표적인 명명법에는 낙타의 등, 헝가리식 표기법, 파스칼 방식 등이 있죠.
다른 개발자들이 많이 사용하는 방법이니 한 번 확인해 보시고 경험 지식을 활용하는 것도 좋은 방법이예요.

◈ 이 책에서 사용하는 명명법

//이 책에서 사용하는 명명법 - 개발자에 따라 다를 수 있음
#include <stdio.h>

#define MAX_STUDENT     50 //매크로 상수 - 명사, 소문자를 사용하지 않음
typedef int Score; //타입명 - 명사, 첫자와 의미가 바뀌는 부분만 대문자

Score CalculateScore(); //함수명 - 동사, 첫자와 의미가 바뀌는 부분만 대문자
int main()
{
    Score score; //변수명 - 명사, 대문자를 사용하지 않음

    score = CalculateScore();
    printf("score:%d \n",score);
    return 0;
}
Score CalculateScore()
{
    return 90;
}

다음에서 개발자가 정할 수 없는 이름과 정할 수 있는 이름을 구별해 보시오.

Compare, int, 3_number, Number_3, AIEB_aide_34, num_!8, num 8

더보기

답:
C언어에서의 명명 규칙은 다음과 같습니다.
알파벳과 정수와 언더바()로 구성할 수 있다. 첫 자는 정수가 올 수 없다. 예약어는 사용할 수 없다. Compare 는 위 조건에 맞습니다. int는 키워드이므로 위 조건에 맞지 않습니다. 3_number는 첫 자가 숫자이므로 위 조건에 맞지 않습니다. Number_3는 위 조건에 맞습니다. AIEB_aide_34는 위 조건에 맞습니다. num!8에는 !가 있어서 위 조건에 맞지 않습니다.
num 8에는 공백 문자가 있어서 위 조건에 맞지 않습니다.

22. 정리하기 (형식 개요)

1. 다음 코드를 수행했을 때 출력 값이 다른 하나를 고르시오.

#include <stdio.h>

int main()

{

    char a=0;

    printf("%d\n",97);

    printf("%d\n",0x61);

    printf("%d\n",'a');

    printf("%d\n",a);

    return 0;

}

a. printf(“%d\n”,97);               b. printf(“%d\n”,0x61);       c. printf(“%d\n”,’a’);               d. printf(“%d\n”,a);

답: d
a.b.c 은 모두 97을 출력합니다. 97과 0x61, ‘a’는 모두 97을 의미합니다.
d는 변수 a의 값인 0을 출력합니다.

2. 다음의 출력 결과를 예측하시오.

printf(“%d %c \n”, ‘a’, 97);
더보기

답:

97 a

‘a’의 아스키 코드 값은 97입니다.

%d 포멧으로 ‘a’를 출력하면 아스키 코드 값인 97을 출력합니다.

%c 포멧으로 97을 출력하면 아스키 코드 문자인 a를 출력합니다.

3. 다음의 출력 결과를 예측하시오.

printf(“%X \n”, 0x80000000 – 1 );
더보기

답: 7FFFFFFF

4. 다음 중 정확한 수를 표현할 수 없는 형식은 무엇인가?

a. int            b. short        c. char         d. float

더보기

답: d

정수 형식은 표현 범위 내에서 정확한 수를 표현할 수 있습니다.

실수 형식은 표현 범위 내에서 오차 범위가 있는 근사치를 표현할 수 있습니다.

5. 다음 중 형식 명으로 사용할 수 없는 것들을 고르시오.

register, printf, IAke_aicD, typedef, int, hello, __Yahoo, 2IeudE, Iaue23DI7, Ya aSA

더보기

답:

register, typedef, int, 21eudE, Ya aSA

참고로 printf는 라이브러리 함수 이름이며 예약어는 아닙니다.

다음과 같은 코드를 작성해서 오류가 있는지 확인해 보세요.

#include <stdio.h>

struct printf

{

    int i;

};

int main(void)

{

    struct printf hel;

    hel.i = 3;

    printf("%d\n",hel.i);

    return 0;

}