작성
·
706
0
그냥 변수명을 int true = 1, false = 0;
이라고 지어서
printf("True is %d\n",true);
printf("False is %d\n", false);
이렇게 출력하는거랑 똑같지 않나요?
왜 사람들이 bool타입을 만들어서 사용하는건가요?
답변 1
0
그렇게 사용하셔도 됩니다.
실제로 아래 소스 코드를 어셈블리어로 변환했을 때와
1 #include <stdio.h>
2 #include <stdbool.h>
3
4 int main()
5 {
6 int i_true = 1;
7 int i_false = 0;
8
9 // bool b_true = true;
10 // bool b_false = false;
11
12 printf("True is %d\n", i_true);
13 printf("False is %d\n", i_false);
14
15 // printf("True is %d\n", b_true);
16 // printf("False is %d\n", b_false);
17
18 return 0;
19 }
아래와 소스 코드를 어셈블리어로 변환했을 때의 결과는 동일합니다.
1 #include <stdio.h>
2 #include <stdbool.h>
3
4 int main()
5 {
6 // int i_true = 1;
7 // int i_false = 0;
8
9 bool b_true = true;
10 bool b_false = false;
11
12 // printf("True is %d\n", i_true);
13 // printf("False is %d\n", i_false);
14
15 printf("True is %d\n", b_true);
16 printf("False is %d\n", b_false);
17
18 return 0;
19 }
위 코드의 어셈블리어
1 .section __TEXT,__text,regular,pure_instructions
2 .build_version macos, 12, 0 sdk_version 12, 3
3 .globl _main ; -- Begin function main
4 .p2align 2
5 _main: ; @main
6 .cfi_startproc
7 ; %bb.0:
8 sub sp, sp, #32
9 stp x29, x30, [sp, #16] ; 16-byte Folded Spill
10 add x29, sp, #16
11 .cfi_def_cfa w29, 16
12 .cfi_offset w30, -8
13 .cfi_offset w29, -16
14 mov w8, #1
15 str x8, [sp]
16 Lloh0:
17 adrp x0, l_.str@PAGE
18 Lloh1:
19 add x0, x0, l_.str@PAGEOFF
20 bl _printf
21 str xzr, [sp]
22 Lloh2:
23 adrp x0, l_.str.1@PAGE
24 Lloh3:
25 add x0, x0, l_.str.1@PAGEOFF
26 bl _printf
27 mov w0, #0
28 ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
29 add sp, sp, #32
30 ret
31 .loh AdrpAdd Lloh2, Lloh3
32 .loh AdrpAdd Lloh0, Lloh1
33 .cfi_endproc
34 ; -- End function
35 .section __TEXT,__cstring,cstring_literals
36 l_.str: ; @.str
37 .asciz "True is %d\n"
38
39 l_.str.1: ; @.str.1
40 .asciz "False is %d\n"
41
42 .subsections_via_symbols
아래 코드의 어셈블리어
1 .section __TEXT,__text,regular,pure_instructions
2 .build_version macos, 12, 0 sdk_version 12, 3
3 .globl _main ; -- Begin function main
4 .p2align 2
5 _main: ; @main
6 .cfi_startproc
7 ; %bb.0:
8 sub sp, sp, #32
9 stp x29, x30, [sp, #16] ; 16-byte Folded Spill
10 add x29, sp, #16
11 .cfi_def_cfa w29, 16
12 .cfi_offset w30, -8
13 .cfi_offset w29, -16
14 mov w8, #1
15 str x8, [sp]
16 Lloh0:
17 adrp x0, l_.str@PAGE
18 Lloh1:
19 add x0, x0, l_.str@PAGEOFF
20 bl _printf
21 str xzr, [sp]
22 Lloh2:
23 adrp x0, l_.str.1@PAGE
24 Lloh3:
25 add x0, x0, l_.str.1@PAGEOFF
26 bl _printf
27 mov w0, #0
28 ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
29 add sp, sp, #32
30 ret
31 .loh AdrpAdd Lloh2, Lloh3
32 .loh AdrpAdd Lloh0, Lloh1
33 .cfi_endproc
34 ; -- End function
35 .section __TEXT,__cstring,cstring_literals
36 l_.str: ; @.str
37 .asciz "True is %d\n"
38
39 l_.str.1: ; @.str.1
40 .asciz "False is %d\n"
41
42 .subsections_via_symbols
요컨대 true, false를 나타내는 불리언과
정수형임을 나타내는 정수형을 구분하여 코드를 읽고 쓰기 위해
사용한다고 보여집니다.