1 00:00:00,000 --> 00:00:02,350 >> [음악 재생] 2 00:00:02,350 --> 00:00:05,444 3 00:00:05,444 --> 00:00:06,360 DOUG 로이드 : 좋아. 4 00:00:06,360 --> 00:00:07,770 이상한 주제의 종류, 오른쪽? 5 00:00:07,770 --> 00:00:09,050 매직 넘버. 6 00:00:09,050 --> 00:00:12,012 그 때 그는 무엇을 의미 미상 매직 넘버에 대해 이야기? 7 00:00:12,012 --> 00:00:14,220 음, 프로그램의 일부 우리는 CS50로 작성했는지 8 00:00:14,220 --> 00:00:16,660 지금까지 몇 가지 이상한 있었다 번호는 종류의 그들에 던져. 9 00:00:16,660 --> 00:00:19,680 아마도 이유로 우리는하지 않습니다 완전히 지금은 이해합니다. 10 00:00:19,680 --> 00:00:23,950 예를 들어, 마리오 문제에서, 우리 23 피라미드의 높이를 출장. 11 00:00:23,950 --> 00:00:26,880 우리는 명시 적으로 말했다 보다 높은 23을 갈 수 없습니다. 12 00:00:26,880 --> 00:00:28,702 >> 그러나 23는 무엇을 의미 하는가? 13 00:00:28,702 --> 00:00:30,410 글쎄, 당신이 읽을 경우 신중을 스펙 14 00:00:30,410 --> 00:00:32,493 알 수도 따라서 우리는 23를 덮인 15 00:00:32,493 --> 00:00:36,160 되는 표준 높이 때문에 터미널 창 24입니다. 16 00:00:36,160 --> 00:00:38,860 그리고 우리는이 그렇다면 피라미드는보다 키가 될, 17 00:00:38,860 --> 00:00:41,290 그것은 이상한 일을 할 수 있습니다 여기서이를 화면을 실행. 18 00:00:41,290 --> 00:00:45,140 당신이 알고, 무엇을 수행 그 오른쪽 맥락에서 의미? 19 00:00:45,140 --> 00:00:48,880 >> 23 즉시 분명한의 의미는 누군가에게 누가 당신의 프로그램에서 보이는 20 00:00:48,880 --> 00:00:51,550 어쩌면 다른이 크기 단자 창? 21 00:00:51,550 --> 00:00:52,330 아마 아닙니다. 22 00:00:52,330 --> 00:00:53,080 그것은 확인을 것 같다. 23 00:00:53,080 --> 00:00:55,005 그럼, 왜 그냥 이하 23 이상이다? 24 00:00:55,005 --> 00:00:56,880 일반적으로,이 종류의 나쁜 습관의 사실 25 00:00:56,880 --> 00:00:58,940 코드에 상수를 작성합니다. 26 00:00:58,940 --> 00:01:02,190 당신이 실제로 수행 할 때, 그렇게함으로써 코드에 상수를 작성, 27 00:01:02,190 --> 00:01:05,630 그것은 사용라고도합니다 것 매직 넘버, 뭔가가 28 00:01:05,630 --> 00:01:08,030 우리는 일반적으로 시도하고 피하고 싶어. 29 00:01:08,030 --> 00:01:12,830 >> 예를 들어,이 살펴 보자 여기에이 간단한 함수에서. 30 00:01:12,830 --> 00:01:15,726 물론 데이터가 없습니다 C의 유형은 카드 덱을했다. 31 00:01:15,726 --> 00:01:16,600 그러니 나와 함께 곰. 32 00:01:16,600 --> 00:01:18,910 그것은 약간의 의사는 여기에 혼합. 33 00:01:18,910 --> 00:01:21,050 이것은라는 기능입니다 그 분명히 카드 거래 34 00:01:21,050 --> 00:01:26,570 그것의 매개 변수로 갑판을 받아, 나에게 의지 출력 하나의 카드. 35 00:01:26,570 --> 00:01:30,990 >> 그리고 여기 어디 뭔가를하고 있어요 , 0-52 실행 루프를 가지고 36 00:01:30,990 --> 00:01:33,394 나는 카드를 처리합니다. 37 00:01:33,394 --> 00:01:35,310 음, 우리는 마법을 가지고있어 여기에 숫자, 오른쪽. 38 00:01:35,310 --> 00:01:38,790 당신은 매직 넘버가 무엇인지 볼 수 있나요? 39 00:01:38,790 --> 00:01:42,280 또는 더 중요한 것은, 당신을 문제는 여기에 뭐가 있는지? 40 00:01:42,280 --> 00:01:44,310 특히이 경우 하나의 기능입니다 41 00:01:44,310 --> 00:01:48,030 자체 파일 이 들어있는 폴더 42 00:01:48,030 --> 00:01:49,970 다른 한 무리의 파일, 각각의 43 00:01:49,970 --> 00:01:51,670 한 벌의 카드에 다른 일을한다. 44 00:01:51,670 --> 00:01:57,310 어쩌면 그것은 그들을 섞고, 또는 손을 거래 5 개의 카드 대신 하나의 카드. 45 00:01:57,310 --> 00:01:59,420 >> 당신은 무엇을 보는가 문제는 여기에있을 수 있을까? 46 00:01:59,420 --> 00:02:03,220 당신은 마법의 수를 볼 수 있나요 나는 코드에 주입 한? 47 00:02:03,220 --> 00:02:04,390 그것은 바로, (52)이다. 48 00:02:04,390 --> 00:02:06,440 >> 마찬가지로, 직관적으로 당신이 아마 알고, 확인을 클릭합니다. 49 00:02:06,440 --> 00:02:09,740 표준 갑판처럼 카드는 52 카드가 포함되어 있습니다. 50 00:02:09,740 --> 00:02:12,570 그러나 우리의 프로그램에서, 그것은 단지 가지 거기에 주위에 떠있는. 51 00:02:12,570 --> 00:02:15,280 갑자기 52있다 같아. 52 00:02:15,280 --> 00:02:18,290 >> 이 문제를 해결하는 한 가지 방법 문제는이 작업을 수행하는 것입니다. 53 00:02:18,290 --> 00:02:22,724 우리는 지금 매우 명시 적있어 52 데크 크기를 부르고. 54 00:02:22,724 --> 00:02:25,390 그것은 좀 더 직관적 준다 때 루프의 의미 55 00:02:25,390 --> 00:02:28,650 우리는 그 다음 내가 말 이후에 갑판의 크기보다 작다. 56 00:02:28,650 --> 00:02:32,666 그것은 단지 52 말보다 더 나은 것 같다. 57 00:02:32,666 --> 00:02:34,290 지금이 실제로 문제를 해결 않습니다. 58 00:02:34,290 --> 00:02:38,460 그것은 몇 가지 기호를 제공 않습니다 상수 의미한다. 59 00:02:38,460 --> 00:02:40,820 그러나 그것은 종류의 실제로 수행 또 다른 문제를 소개합니다 60 00:02:40,820 --> 00:02:43,770 그 즉시 명확하지 않을 수 있습니다. 61 00:02:43,770 --> 00:02:45,859 심지어이 변수는 경우 globally-- 선언 62 00:02:45,859 --> 00:02:47,650 당신은 무엇을 기억합니까 우리가 선언 할 때 의미 63 00:02:47,650 --> 00:02:50,500 전 세계적으로 로컬 대 변수? 64 00:02:50,500 --> 00:02:53,340 우리는 변수를 선언하더라도 전 세계적으로, 어떤이 있다면 65 00:02:53,340 --> 00:02:55,500 다른 기능에 기능을 우리의 스위트 룸 66 00:02:55,500 --> 00:02:59,750 카드 조작과 그 거래 그 실수, 갑판 크기를 변경 67 00:02:59,750 --> 00:03:02,727 아니면 증가하여 1 또는 1을 감소시킨다. 68 00:03:02,727 --> 00:03:04,060 그건 바로, 문제를 불러올 수도? 69 00:03:04,060 --> 00:03:08,261 우리는 세트 상대하고 특히 경우 카드의 전체 갑판을 걸어 갔다 곳 70 00:03:08,261 --> 00:03:08,760 필요합니다. 71 00:03:08,760 --> 00:03:12,804 갑판의 크기는 감소되면 1, 예를 들면, 51, 72 00:03:12,804 --> 00:03:14,970 우리는 실제로 셔플하지 않을 아마도 모든 카드. 73 00:03:14,970 --> 00:03:16,500 우리는 그들 중 하나를 떠난다. 74 00:03:16,500 --> 00:03:21,680 그리고 그 값은 아마도 수 예측 또는 나쁜 배우에 의해 악용. 75 00:03:21,680 --> 00:03:24,920 >> C는라고 무슨 제공 처리기 지시문, 어떤 76 00:03:24,920 --> 00:03:27,764 또한 매크로라고합니다 기호 상수를 작성. 77 00:03:27,764 --> 00:03:30,180 그리고 사실, 당신은 이미했습니다 처리기 지시문을 본, 78 00:03:30,180 --> 00:03:32,916 당신은 그것을 듣고하지 않은 경우에도 #INCLUDE와 그 불렀다. 79 00:03:32,916 --> 00:03:37,150 이 매크로의 또 다른 예이다 또는 처리기 지시문. 80 00:03:37,150 --> 00:03:41,290 >> 방법은 기호 상수를 만들려면 또는 상수에 이름을 부여 81 00:03:41,290 --> 00:03:43,740 더이 너무 즉, 다음과 같다. 82 00:03:43,740 --> 00:03:47,030 #DEFINE, 이름, 교체. 83 00:03:47,030 --> 00:03:49,140 옆으로 정말 중요 여기 정말 빨리. 84 00:03:49,140 --> 00:03:54,180 세미콜론을 넣지 마십시오 당신의 # 정의의 끝. 85 00:03:54,180 --> 00:03:57,310 그래서 #DEFINE, 이름, 교체입니다. 86 00:03:57,310 --> 00:03:59,540 >> 프로그램이 컴파일되면, 무엇 실제로 발생 87 00:03:59,540 --> 00:04:01,740 가는 경우 컴파일러는 당신의 코드를 통해 이동합니다 88 00:04:01,740 --> 00:04:06,770 과의 모든 인스턴스를 교체 무엇과 단어 "이름"을 89 00:04:06,770 --> 00:04:08,860 대체했습니다. 90 00:04:08,860 --> 00:04:13,060 유사하게, #INCLUDE 경우 종류 의 복사 및 붙여 넣기 유사, 91 00:04:13,060 --> 00:04:15,700 다음 #DEFINE 일종이다 찾기 및 바꾸기 유사, 92 00:04:15,700 --> 00:04:19,180 혹시에서 해당 기능을 사용 한 경우 워드 프로세싱 프로그램, 예를 들면. 93 00:04:19,180 --> 00:04:26,345 >> 예를 들어, 그래서 3.14159265로 파이를 #define한다, 94 00:04:26,345 --> 00:04:28,720 당신은 더 나은 수학적 있다면 경사하고 갑자기 95 00:04:28,720 --> 00:04:31,640 3.14159265 비행 참조 주위에 당신의 코드에서, 96 00:04:31,640 --> 00:04:33,517 당신은 아마 파이에 대해 얘기 알고있다. 97 00:04:33,517 --> 00:04:35,850 하지만 어쩌면 우리는을 제공 할 수 있습니다 좀 더 상징적 의미. 98 00:04:35,850 --> 00:04:39,850 그리고 우리는 대신 #DEFINE 말할 수 숫자의 입으로 파이 99 00:04:39,850 --> 00:04:42,110 나는 계속 않을거야 것을 반복해서 읽고. 100 00:04:42,110 --> 00:04:45,560 >> 그리고 무엇에 다음 일어날 프로그램이 경우 컴파일 시간이다 101 00:04:45,560 --> 00:04:48,530 컴파일, 제일 먼저 그 일어날 것 그것을 통해 갈 것입니다 102 00:04:48,530 --> 00:04:51,520 그것은 모든 시간을 대체합니다 그것은 자본 P, 자본 나는 본다 103 00:04:51,520 --> 00:04:55,610 그것은 문자 그대로로 교체합니다 3.14 등등, 그래서 당신 104 00:04:55,610 --> 00:04:58,090 그것은 모든를 입력 할 필요가 없습니다 시간이 여전히 프로그램 동안 105 00:04:58,090 --> 00:05:00,631 기능이 당신을 당신이 최선을 다하고 있기 때문에, 기대 106 00:05:00,631 --> 00:05:05,090 조작과, 곱셈, 이 파이가 무엇이든, 분할. 107 00:05:05,090 --> 00:05:08,230 >> 당신은 이것에 한정되지 않는다 숫자 만에 대한 대체. 108 00:05:08,230 --> 00:05:12,279 예를 들어, 나는 #define한다 수 문자열 CS50 등의 과정. 109 00:05:12,279 --> 00:05:14,070 이 경우, 언제 프로그램은 컴파일, 110 00:05:14,070 --> 00:05:16,236 #DEFINE는 통과합니다 코드마다 교체 111 00:05:16,236 --> 00:05:19,900 그것은 문자열 CS50에 "물론"를 본다. 112 00:05:19,900 --> 00:05:21,720 >> 여기서 알 수 있습니다 또한 내가 그 자주 113 00:05:21,720 --> 00:05:26,090 #DEFINE 내 모든 기호 정의 상수는, 그래서, 말하자면 114 00:05:26,090 --> 00:05:28,130 모두 대문자로 항상. 115 00:05:28,130 --> 00:05:28,960 그것은 규칙입니다. 116 00:05:28,960 --> 00:05:30,170 그것은 필요하지입니다. 117 00:05:30,170 --> 00:05:33,900 그 이유는 일반적으로 사람이 사용 모두 대문자가 #define을 써서있어 118 00:05:33,900 --> 00:05:37,590 그냥 정말 명확하게하는 것입니다 내 코드의 특정 요소 119 00:05:37,590 --> 00:05:38,820 정의 된 상수이다. 120 00:05:38,820 --> 00:05:43,730 이 소문자 인 경우, 그것은 가능성이 그것은 변수와 혼동 될 수 있습니다. 121 00:05:43,730 --> 00:05:46,120 그리고 그것은 아마 좋은 일을 수행 할 수 없습니다. 122 00:05:46,120 --> 00:05:48,910 >> 그래서이 특정 솔루션은 훨씬 더 123 00:05:48,910 --> 00:05:50,550 이전의 것들 중 하나보다. 124 00:05:50,550 --> 00:05:59,950 내가 처음 #DEFINE 데크 크기 (52), 다음의 경우 지금 여기에 (52), 또는 갑판 크기의 제 사용, 125 00:05:59,950 --> 00:06:01,850 훨씬 더 직관적이고 많은 안전합니다. 126 00:06:01,850 --> 00:06:03,280 당신은 상수를 조작 할 수 있습니다. 127 00:06:03,280 --> 00:06:05,259 당신은 52 플러스 플러스 말할 수 없다. 128 00:06:05,259 --> 00:06:06,800 즉 (53)로 변환 할 수 없을거야. 129 00:06:06,800 --> 00:06:09,390 당신은 뭔가 (52)을 변경할 수 없습니다. 130 00:06:09,390 --> 00:06:12,470 >> 당신은 변수를 변경할 수 있습니다 값이 52입니다, 131 00:06:12,470 --> 00:06:14,870 이는 우리가 전에했던 첫 번째 수정했다. 132 00:06:14,870 --> 00:06:17,000 그리고 당신은 증가시킬 수있다 (53)에 해당 변수. 133 00:06:17,000 --> 00:06:21,100 하지만 당신은 52 플러스 플러스 말할 수 없다 갑자기 53로 (52)를 설정하는 것이 있습니다. 134 00:06:21,100 --> 00:06:23,350 (52)는 항상 52입니다. 135 00:06:23,350 --> 00:06:28,860 그래서 당신은 실수로 변경할 수 없습니다 여기를 조작하여 갑판 크기, 136 00:06:28,860 --> 00:06:29,940 137 00:06:29,940 --> 00:06:32,390 >> 또 다른 좋은 쪽 비록 이러한 효과가있다 138 00:06:32,390 --> 00:06:38,310 당신이 알고있는 것을하지 세계의 모든 국가 139 00:06:38,310 --> 00:06:40,690 크기 (52)의 한 벌의 카드를 사용할 수 있습니까? 140 00:06:40,690 --> 00:06:45,630 예를 들어, 그것은 정말 흔한 독일, 32의 갑판 크기를 사용하는 141 00:06:45,630 --> 00:06:48,020 그들은 일부를 제거 어디에 낮은 값 카드. 142 00:06:48,020 --> 00:06:50,960 이 경우, I 포트 내 스위트 원 143 00:06:50,960 --> 00:06:55,390 처리 기능 독일에 카드 조작. 144 00:06:55,390 --> 00:06:59,440 나는 첫 번째 인스턴스의 수 우리 보여 가서 교체해야 145 00:06:59,440 --> 00:07:03,570 (32) 내 코드 (52)의 모든 인스턴스. 146 00:07:03,570 --> 00:07:07,940 >> 그러나 여기, 내가로 #define 경우 갑판 크기 내 코드의 맨 위쪽에 32, 147 00:07:07,940 --> 00:07:11,730 나는 그것을 변경해야하는 경우, 내가 할 수있는 그냥 가서 그 한 가지를 변경합니다. 148 00:07:11,730 --> 00:07:15,010 코드를 컴파일하고, 모든 갑작스런 그것은 통해 전파. 149 00:07:15,010 --> 00:07:18,850 사실, 우리는 갑판을 변경할 수 있습니다 우리가 원하는 값으로 크기. 150 00:07:18,850 --> 00:07:22,500 >> 나는 당신을 관심을 수 갑판 사이즈 픽업의 게임? 151 00:07:22,500 --> 00:07:23,430 >> 나는 더그 로이드입니다. 152 00:07:23,430 --> 00:07:25,840 그리고 이것은 CS50입니다. 153 00:07:25,840 --> 00:07:27,772