1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [მუსიკის დაკვრა] 3 00:00:11,210 --> 00:00:12,100 >> ROB ბოდენი ყველა უფლება. 4 00:00:12,100 --> 00:00:15,620 ასე რომ, პირველი, რაც პირველ რიგში, ვიდეო ეხლა ნაცნობი სახე. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [ვიდეო აღწარმოების] 7 00:00:22,560 --> 00:00:23,370 >> -All უფლება. 8 00:00:23,370 --> 00:00:27,150 ეს არის CS50, და ეს არის დაწყების კვირაში სამი. 9 00:00:27,150 --> 00:00:29,980 მე ვწუხვარ მე ვერ იქნება იქ, თქვენთან ერთად დღეს, მაგრამ ნება მიბოძეთ წარმოგიდგინოთ 10 00:00:29,980 --> 00:00:32,880 CS50 საკუთარი Rob ბოდენი. 11 00:00:32,880 --> 00:00:33,872 >> [END ვიდეო აღწარმოების] 12 00:00:33,872 --> 00:00:39,340 >> [ტაში და აპლოდისმენტების] 13 00:00:39,340 --> 00:00:41,277 >> ROB ბოდენი: ფილმოგრაფია in რომ ვიდეო არის ფანტასტიური. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 ყველა უფლება. 16 00:00:47,770 --> 00:00:50,960 ასე რომ, პირველი, არსებობს კიდევ ერთი სადილი. 17 00:00:50,960 --> 00:00:52,330 ის ხვალ, 1:15. 18 00:00:52,330 --> 00:00:54,480 არ არსებობს ლანჩი ამ პარასკევს. 19 00:00:54,480 --> 00:00:55,810 ეს არის Quora. 20 00:00:55,810 --> 00:01:00,190 და ტომი არ არის აქ, მაგრამ ერთი ხალხი იქ არის ყოფილი ხელმძღვანელი CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 ასე რომ, ის fun guy. 23 00:01:02,730 --> 00:01:04,819 თქვენ უნდა მოდის. 24 00:01:04,819 --> 00:01:05,900 >> ყველა უფლება. 25 00:01:05,900 --> 00:01:11,360 ასე რომ, გასულ კვირას, ჩვენ დავიწყეთ შეტევის გარდა იმაზე, თუ რა სიმებიანი ნამდვილად არის. 26 00:01:11,360 --> 00:01:14,830 ჩვენ ცნობილია, წლის დასაწყისიდან, რომ ეს თანმიმდევრობა სიმბოლო. 27 00:01:14,830 --> 00:01:18,130 მაგრამ გასულ კვირას, ჩვენ delved შევიდა ფაქტი რომ ის, რაც მართლაც თანმიმდევრობა 28 00:01:18,130 --> 00:01:22,110 პერსონაჟები, ასევე, ჩვენ ახლა აქვს მასივები სიმბოლო. 29 00:01:22,110 --> 00:01:26,450 და ვიცით, რომ სიმებიანი, ეს მასივი გმირები, ერთი ბოლომდე, 30 00:01:26,450 --> 00:01:30,920 ჩვენ ამ სპეციალური null byte, ამ backslash 0, მიანიშნებს ბოლოს 31 00:01:30,920 --> 00:01:32,230 სიმებიანი. 32 00:01:32,230 --> 00:01:36,970 >> და ასე string არის მასივი პერსონაჟი, მაგრამ ჩვენ შეგვიძლია მეტი 33 00:01:36,970 --> 00:01:39,530 მხოლოდ მასივი გმირები, ჩვენ შეგვიძლია მასივი ნებისმიერი 34 00:01:39,530 --> 00:01:40,890 ტიპის რამ გვინდა. 35 00:01:40,890 --> 00:01:51,570 ასე რომ, თუ გახსოვთ, გასულ კვირას, ასაკის პროგრამა, რომელიც დავით გააცნო 36 00:01:51,570 --> 00:01:53,560 მართლაც სწრაფად. 37 00:01:53,560 --> 00:01:57,010 ასე რომ, პირველი, რაც ჩვენ ვაპირებთ გავაკეთოთ არის ვთხოვთ მომხმარებელს რიცხვი, 38 00:01:57,010 --> 00:01:58,800 რაოდენობის ხალხი ოთახში. 39 00:01:58,800 --> 00:02:01,260 მას შემდეგ, რაც ჩვენ გვაქვს, რომ რიცხვი, ჩვენ ვაცხადებთ მასივი. 40 00:02:01,260 --> 00:02:02,890 ყურადღება მიაქციეთ ამ bracket სინტაქსი. 41 00:02:02,890 --> 00:02:04,540 თქვენ აპირებს შეეგუოს, რომ. 42 00:02:04,540 --> 00:02:09,430 >> ამიტომ ჩვენ ვაცხადებთ მასივი რიცხვებით ე.წ. ასაკის, და არსებობს n 43 00:02:09,430 --> 00:02:12,080 რიცხვებით ამ მასივი. 44 00:02:12,080 --> 00:02:16,480 ასე რომ, ეს ნიმუში სწორედ აქ, ამ 4 int i უდრის 0, i ნაკლებია, ვიდრე n, i პლუს 45 00:02:16,480 --> 00:02:20,580 პლუს, რომელიც ასევე იქნება ნიმუში რომ თქვენ გაქვთ ძალიან გამოიყენება. 46 00:02:20,580 --> 00:02:24,000 იმის გამო, რომ საკმაოდ ბევრი, თუ თქვენ ყოველთვის აპირებს iterate მეტი მასივები. 47 00:02:24,000 --> 00:02:26,330 ასე მახსოვს, რომ n არის ხანგრძლივობა ჩვენი მასივი. 48 00:02:26,330 --> 00:02:32,120 და ა.შ. აქ, ჩვენ არაერთხელ ითხოვს ასაკის ადამიანი ოთახში. 49 00:02:32,120 --> 00:02:36,640 >> ამის შემდეგ ვეშვებით, და რაც თვითნებური გამო, ჩვენ მაშინ 50 00:02:36,640 --> 00:02:40,220 ამობეჭდოთ რამდენი წლის ისინი აპირებენ უნდა იყოს ერთი წლის შემდეგ. 51 00:02:40,220 --> 00:02:49,980 და გაშვებული რომ პროგრამა, მოდით რათა ასაკის, dot slash ასაკის. 52 00:02:49,980 --> 00:02:53,010 ასე რომ, რაოდენობის ხალხი ოთახი, ვთქვათ არსებობს სამი. 53 00:02:53,010 --> 00:02:59,880 და აცხადებენ, რომ პირველი პირი არის 13, შემდეგი არის 26, და ბოლო 30. 54 00:02:59,880 --> 00:03:05,080 ასე რომ მაშინ ეს თქვენ iterate მეტი იმ სამი ადამიანი, ამობეჭდოთ 14, 27 და 31. 55 00:03:05,080 --> 00:03:16,060 >> ასე მახსოვს, რომ როდესაც ვაცხადებთ მასივი ზომა N, მაჩვენებლების, რომ 56 00:03:16,060 --> 00:03:19,950 მასივი, მასივი აქვს ფასეულობები და ინდექსების 0, 1, 2, ყველა გზა 57 00:03:19,950 --> 00:03:21,680 მდე n მინუს 1. 58 00:03:21,680 --> 00:03:26,255 ასე რომ, როდესაც ჩვენ თქმით, სამი ადამიანი ოთახში, და ჩვენ აქ 59 00:03:26,255 --> 00:03:29,850 პირველი iteration მეშვეობით loop, i იქნება 0. 60 00:03:29,850 --> 00:03:31,650 ასე რომ ინდექსი 0. 61 00:03:31,650 --> 00:03:34,540 ჩვენ მინიჭების პირველი ასაკი შესახებ შემოდის. 62 00:03:34,540 --> 00:03:38,870 შემდეგ მომდევნო ერთი, ჩვენ შევდივართ მეორე n მომხმარებლის შემოდის და 63 00:03:38,870 --> 00:03:40,580 შემდეგ ორი, ბოლო n. 64 00:03:40,580 --> 00:03:44,200 >> ასე რომ შეამჩნია, რომ მასივი ზომა სამი ამჯამად არ აქვს არაფერს 65 00:03:44,200 --> 00:03:46,040 ინდექსი სამი. 66 00:03:46,040 --> 00:03:49,036 ეს არ არის სწორი. 67 00:03:49,036 --> 00:03:50,250 ყველა უფლება. 68 00:03:50,250 --> 00:03:55,136 ასე რომ, ბრუნდება აქ. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 ასე რომ, ახლა რომ ჩვენ შესძლეს მასივები, ჩვენ გვაქვს გარკვეული ცოდნა. 71 00:04:01,590 --> 00:04:03,780 ახლა ჩვენ ვაპირებთ გადაადგილება ბრძანება ხაზი არგუმენტები, რომლებიც იქნება 72 00:04:03,780 --> 00:04:05,890 საკმაოდ შესაბამისი ამ პრობლემის კომპლექტი. 73 00:04:05,890 --> 00:04:09,670 >> ასე რომ, დღემდე, როდესაც თქვენ გამოაცხადეთ მთავარი ფუნქცია, ჩვენ 74 00:04:09,670 --> 00:04:11,230 განაცხადა int ძირითადი ბათილად. 75 00:04:11,230 --> 00:04:14,070 ასე რომ, ბათილად მხოლოდ იმას ნიშნავს, რომ ჩვენ არ ვართ ავლით ნებისმიერი 76 00:04:14,070 --> 00:04:16,440 არგუმენტები ამ ფუნქციას. 77 00:04:16,440 --> 00:04:19,190 ახლა ჩვენ ვაპირებთ ვხედავ, რომ მთავარი შეუძლია რამდენიმე არგუმენტები. 78 00:04:19,190 --> 00:04:22,470 აქ ჩვენ მოვუწოდებთ მათ int argc და სიმებიანი argv ფრჩხილებში. 79 00:04:22,470 --> 00:04:26,930 ფრჩხილებში, კიდევ ერთხელ, იმაზე მიუთითებს, რომ ჩვენ საქმე გვაქვს მასივები. 80 00:04:26,930 --> 00:04:31,850 ასე რომ აქ, სიმებიანი argv ფრჩხილებში, ჩვენ საქმე მასივი სტრიქონები. 81 00:04:31,850 --> 00:04:35,360 ასე რომ argc, რომ აპირებს მიუთითებს რამდენი არგუმენტები ჩვენ 82 00:04:35,360 --> 00:04:37,580 გავიდა ეს პროგრამა. 83 00:04:37,580 --> 00:04:46,050 და ვნახოთ, რას ნიშნავს, მოდით დახურვა. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 ასე რომ, დღემდე, ჩვენ აწარმოებს ყველა პროგრამა მოსწონს dot slash ასაკის. 86 00:04:50,790 --> 00:04:55,250 ჩვენ ასევე შეგვიძლია, ბრძანებათა ზოლს, წარსულში გაივლის არგუმენტები, ამიტომ ტერმინი, ბრძანება 87 00:04:55,250 --> 00:04:56,550 ხაზი არგუმენტები. 88 00:04:56,550 --> 00:04:59,760 ასე რომ, პირველი არგუმენტი, hello მსოფლიოში. 89 00:04:59,760 --> 00:05:03,350 ასე რომ აქ, argc იქნება სამი. 90 00:05:03,350 --> 00:05:07,720 ის რაოდენობა არგუმენტები ბრძანებათა ზოლს. 91 00:05:07,720 --> 00:05:12,840 Argc ყოველთვის მინიმუმ 1, რადგან dot slash ასაკის, თავისთავად, ითვლის, როგორც ერთი 92 00:05:12,840 --> 00:05:14,490 ბრძანების არგუმენტები. 93 00:05:14,490 --> 00:05:17,010 >> მაშინ მიესალმები არის პირველი. 94 00:05:17,010 --> 00:05:20,460 იმ შემთხვევაში, თუ dot slash ასაკის არის zeroth, მაშინ მიესალმები არის პირველი და მსოფლიოში არის 95 00:05:20,460 --> 00:05:22,830 მეორე ბრძანების არგუმენტი. 96 00:05:22,830 --> 00:05:29,490 ასე რომ სიმებიანი argv, ჩვენ ვაპირებთ, რომ ნახოთ, შეიცავს სიმები, dot slash 97 00:05:29,490 --> 00:05:33,830 ასაკის, hello, და მსოფლიოში. 98 00:05:33,830 --> 00:05:38,945 და, დავით თხოვნით, ჩვენ ვაპირებთ თამაში ვიდეო შემოღების რომ. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [ვიდეო აღწარმოების] 101 00:05:43,890 --> 00:05:46,240 >> -Up აქამდე პროგრამების ჩვენ დაწერილი, ჩვენ ვაცხადებთ 102 00:05:46,240 --> 00:05:48,500 მთავარი როგორც int ძირითადი ბათილად. 103 00:05:48,500 --> 00:05:51,170 და ყველა ამ დროს, რომ ბათილად აქვს უბრალოდ მიუთითებს, რომ 104 00:05:51,170 --> 00:05:54,430 პროგრამა არ მიიღოს ნებისმიერი ბრძანების არგუმენტები. 105 00:05:54,430 --> 00:05:57,750 სხვა სიტყვებით, როდესაც მომხმარებელი გადის პროგრამა, მას შეუძლია ბრძანება 106 00:05:57,750 --> 00:06:01,710 ხაზი არგუმენტები წერილობით დამატებითი სიტყვა ან ფრაზა შემდეგ პროგრამის 107 00:06:01,710 --> 00:06:03,000 ასახელებს ბრძანებათა ზოლზე. 108 00:06:03,000 --> 00:06:06,550 >> ისე, თუ გინდათ თქვენი პროგრამა მიიღოს ბრძანება ხაზი არგუმენტები, ერთი ან 109 00:06:06,550 --> 00:06:10,540 ასეთი სიტყვებით, ჩვენ უნდა შეცვალოს ბათილად რამდენიმე არგუმენტები. 110 00:06:10,540 --> 00:06:12,200 მოდით გავაკეთოთ ეს. 111 00:06:12,200 --> 00:06:15,750 მოიცავს cs50.h. 112 00:06:15,750 --> 00:06:19,360 მოიცავს სტანდარტული io.h. 113 00:06:19,360 --> 00:06:20,760 Int მთავარი. 114 00:06:20,760 --> 00:06:26,330 და ახლა, ნაცვლად ბათილად, მე ვაპირებ მიუთითოთ int მოუწოდა argc და 115 00:06:26,330 --> 00:06:28,780 მასივი სტრიქონები ეწოდება argv. 116 00:06:28,780 --> 00:06:31,820 ახლა, argc და argv არის უბრალოდ კონვენციები. 117 00:06:31,820 --> 00:06:34,000 >> ჩვენ შეგვეძლო მოუწოდა ეს არგუმენტები ყველაზე არაფერი გვინდა. 118 00:06:34,000 --> 00:06:37,630 მაგრამ რა არის მნიშვნელოვანი ის არის, რომ argc არის int, რადგან, ზოგადად, ეს არის 119 00:06:37,630 --> 00:06:41,360 აპირებს შეიცავდეს არგუმენტი რაოდენობა, სიტყვების რაოდენობა, სულ რომ 120 00:06:41,360 --> 00:06:43,380 მომხმარებელს ჯერ აკრეფილი ერთი მისი ზოლზე. 121 00:06:43,380 --> 00:06:47,910 argv, იმავდროულად, არგუმენტი ვექტორი, არის აპირებს რეალურად იყოს მასივი შენახვა 122 00:06:47,910 --> 00:06:52,020 ყველა სიტყვა, რომ მომხმარებელს აქვს აკრეფილი ერთი მისი ზოლზე. 123 00:06:52,020 --> 00:06:54,500 >> მოდით გაგრძელება რაღაც ახლა ერთი ან მეტი ასეთი 124 00:06:54,500 --> 00:06:55,660 ბრძანების არგუმენტები. 125 00:06:55,660 --> 00:07:00,070 კერძოდ, მოდით წავიდეთ წინ და ბეჭდვითი რასაც სიტყვის მომხმარებლის ტიპის 126 00:07:00,070 --> 00:07:03,960 შემდეგ პროგრამის სახელი ბრძანებათა ზოლზე. 127 00:07:03,960 --> 00:07:04,730 ღია bracket. 128 00:07:04,730 --> 00:07:06,240 Close bracket. 129 00:07:06,240 --> 00:07:10,510 Printf პროცენტს s backslash და მძიმით. 130 00:07:10,510 --> 00:07:14,550 და ახლა მე უნდა ვუთხრა printf რა ღირებულება შეაერთედ შევიდა, რომ placeholder. 131 00:07:14,550 --> 00:07:18,600 მე მინდა, რომ პირველი სიტყვა, რომ მომხმარებელს აქვს აკრეფილი შემდეგ პროგრამის სახელი, 132 00:07:18,600 --> 00:07:23,130 და ა.შ. მე ვაპირებ მიუთითოთ argv bracket 1, ახლო 133 00:07:23,130 --> 00:07:24,830 ფრჩხილებში, მძიმით. 134 00:07:24,830 --> 00:07:27,290 >> ახლა, რატომ bracket 1 და არა bracket 0? 135 00:07:27,290 --> 00:07:30,990 ასევე, თურმე, ავტომატურად ინახება ამ argv 0 იქნება 136 00:07:30,990 --> 00:07:32,620 პროგრამის ფაქტობრივი სახელით. 137 00:07:32,620 --> 00:07:36,180 ასე რომ პირველი სიტყვა, რომელიც მომხმარებლის ტიპი მას შემდეგ, რაც პროგრამის სახელწოდება არის, 138 00:07:36,180 --> 00:07:38,990 კონგრესზე იქნება შენახული argv 1. 139 00:07:38,990 --> 00:07:42,380 მოდით ახლა კომპილირდება და აწარმოებს ამ პროგრამის. 140 00:07:42,380 --> 00:07:47,780 >> რათა argv 0, dot slash argv 0. 141 00:07:47,780 --> 00:07:50,520 და ახლა, სიტყვა hello. 142 00:07:50,520 --> 00:07:51,670 შეიყვანეთ. 143 00:07:51,670 --> 00:07:53,520 და იქ ჩვენ მას, hello. 144 00:07:53,520 --> 00:07:55,750 >> [END ვიდეო აღწარმოების] 145 00:07:55,750 --> 00:07:57,000 >> ROB ბოდენი ყველა უფლება. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 დახურვა რომ. 148 00:08:01,230 --> 00:08:16,730 ასე რომ შევხედოთ, რომ პროგრამა, რომელიც ჩვენ უბრალოდ გააცნო ჩვენთვის, ისევე, უბრალოდ 149 00:08:16,730 --> 00:08:24,710 რათა ნახოთ, თუ ჩვენ ბეჭდვა argv 0, რათა, ახლა რა არის ეს, argv 0, dot slash argv 0. 150 00:08:24,710 --> 00:08:30,440 ასე რომ, როგორც მოსალოდნელია, ეს დაბეჭდვისას პროგრამის დასახელება, რადგან argv 0 არის 151 00:08:30,440 --> 00:08:32,970 ყოველთვის იქნება პროგრამის დასახელება. 152 00:08:32,970 --> 00:08:35,640 მაგრამ მოდით რაღაც ცოტა უფრო საინტერესო. 153 00:08:35,640 --> 00:08:42,080 >> ასე რომ, პრობლემა კომპლექტი, თქვენ გექნებათ გააცნო ამ ფუნქციის atoi. 154 00:08:42,080 --> 00:08:44,440 ასე რომ, რას ვიყენებთ atoi ამისთვის? 155 00:08:44,440 --> 00:08:48,550 რომ აპირებს გარდაქმნას სიმებიანი რიცხვი. 156 00:08:48,550 --> 00:08:53,280 ასე რომ, თუ მე გაივლის სიმებიანი, ერთი ორი სამი, to atoi, რომ ყველაფერს კონვერტირება, რომ 157 00:08:53,280 --> 00:08:56,910 რომ რიცხვი, ერთი ორი სამი. 158 00:08:56,910 --> 00:09:01,480 ამიტომ, ჩვენ ვაპირებთ კონვერტირება პირველი ბრძანების არგუმენტი რიცხვი, 159 00:09:01,480 --> 00:09:05,690 და შემდეგ უბრალოდ ბეჭდვა, რომ მთელი რიცხვი. 160 00:09:05,690 --> 00:09:09,680 >> ასე რომ, ძირითადად, ჩვენ ერთგვარი reimplementing GetInt, მხოლოდ 161 00:09:09,680 --> 00:09:12,350 რიცხვი შევიდა ბრძანებათა ონლაინ ნაცვლად პროგრამა 162 00:09:12,350 --> 00:09:14,560 ინტერაქტიულად. 163 00:09:14,560 --> 00:09:23,170 ასე რომ, რაც argv 0, მოდით ეს აქ, და დახუროს, რომ. 164 00:09:23,170 --> 00:09:27,670 ასე გაშვებული argv 0, და მოდით შეიყვანოთ რიცხვი, ერთი ორი სამი, ოთხი, ერთი ორი. 165 00:09:27,670 --> 00:09:30,840 ასე რომ თქვენ ბეჭდვა რიცხვი, ერთი ორი სამი, ოთხი, ერთი ორი. 166 00:09:30,840 --> 00:09:35,500 არსებობს გარკვეული ნიუანსები to atoi რომ ეს თქვენ შეწყვიტოს ზრუნვა არაფერს 167 00:09:35,500 --> 00:09:39,040 მიღმა მოქმედებს რიცხვითი ხასიათი, მაგრამ, რომ არ აქვს მნიშვნელობა. 168 00:09:39,040 --> 00:09:42,870 >> ასე რომ, როგორ ფიქრობთ რა მოხდება თუ ამის გაკეთება? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 სეგმენტაცია ბრალია. 171 00:09:47,050 --> 00:09:50,410 რატომ არის, რომ? 172 00:09:50,410 --> 00:09:56,060 თუ ვიხსენებთ ჩვენი პროგრამა, ჩვენ კონვერტაცია argv 1, პირველი არგუმენტი 173 00:09:56,060 --> 00:09:59,610 მას შემდეგ, რაც პროგრამის სახელი, რიცხვი. 174 00:09:59,610 --> 00:10:03,350 მაგრამ არ არსებობს არგუმენტი გავიდა მას შემდეგ, რაც პროგრამის სახელი. 175 00:10:03,350 --> 00:10:08,060 ასე რომ, აქ ჩვენ ვხედავთ, რომ ეს არის buggy პროგრამა, რადგან, თუ ჩვენ ვცდილობთ, რომ აწარმოებს 176 00:10:08,060 --> 00:10:10,530 ყოველგვარი არგუმენტების ეს იქნება მხოლოდ მისაწოდებლად. 177 00:10:10,530 --> 00:10:16,950 >> ასე რომ, კიდევ ერთი საერთო ნიმუში თქვენ ნახავთ არის რაღაც, თუ argc ნაკლებია, 178 00:10:16,950 --> 00:10:21,100 გარდა ორი, მიუთითებს, რომ იქ არ იყო მინიმუმ პროგრამის სახელი და 179 00:10:21,100 --> 00:10:29,100 პირველი არგუმენტი, მაშინ ჩვენ რაღაც მოსწონს printf, არ არის საკმარისი, 180 00:10:29,100 --> 00:10:31,190 ბრძანების არგუმენტები. 181 00:10:31,190 --> 00:10:33,170 ეს, ალბათ, არ არის კარგი ერთი ბეჭდვა, ეს, ალბათ, რაღაც, როგორიცაა 182 00:10:33,170 --> 00:10:35,440 თქვენ უნდა მიუთითოთ მთელი რიცხვი ბრძანებათა ზოლს. 183 00:10:35,440 --> 00:10:37,450 მე უბრალოდ დასრულდება იგი. 184 00:10:37,450 --> 00:10:39,600 ხოლო შემდეგ დაბრუნდნენ 1. 185 00:10:39,600 --> 00:10:44,740 ასე მახსოვს, რომ დასასრულს ჩვენი პროგრამა, თუ ვბრუნდებით 0, რომ სახის 186 00:10:44,740 --> 00:10:47,060 მიუთითებს წარმატება. 187 00:10:47,060 --> 00:10:50,940 და ძირითადი ასევე ავტომატურად დააბრუნებს 0 თუ არა. 188 00:10:50,940 --> 00:10:55,800 >> ასე რომ აქ, ჩვენ retuning 1 მიუთითოს რომ ეს არ არის წარმატება. 189 00:10:55,800 --> 00:11:01,000 და თქვენ შეგიძლიათ დაბრუნებას რაც გაგიხარდებათ, უბრალოდ, 0 მიუთითებს, წარმატება და 190 00:11:01,000 --> 00:11:03,390 არაფერი მიუთითებს უკმარისობა. 191 00:11:03,390 --> 00:11:04,855 მოდით აწარმოებს ამ მობილური რამ. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 ახლა, თუ ჩვენ არ შევა ბრძანების არგუმენტი, რომ ყველაფერს სწორად ვუთხრა 194 00:11:16,600 --> 00:11:18,290 ჩვენთან, საკმარისი არ არის command line. 195 00:11:18,290 --> 00:11:20,610 არ დაასრულებს სასჯელი. 196 00:11:20,610 --> 00:11:24,950 სხვაგან, თუ ჩვენ რეალურად გაიაროს ეს ერთი, ეს შეიძლება დასრულდეს პროგრამა. 197 00:11:24,950 --> 00:11:27,920 ასე რომ, ეს არის, თუ როგორ გამოიყენოთ argc in რათა შეამოწმოს ნომერი 198 00:11:27,920 --> 00:11:30,630 ბრძანების არგუმენტები, რომ რეალურად გაიარა. 199 00:11:30,630 --> 00:11:39,360 >> მოდით ამ პროგრამის უფრო მეტი რთული და შევხედოთ მეორე 200 00:11:39,360 --> 00:11:42,180 iteration რამ. 201 00:11:42,180 --> 00:11:46,310 ახლა, ჩვენ არა მხოლოდ დაბეჭდვის პირველი ბრძანების არგუმენტი. 202 00:11:46,310 --> 00:11:51,210 აქ, ჩვენ iterating საწყისი int i შეადგენს 0, i არის ნაკლები ვიდრე argc, i პლუს 203 00:11:51,210 --> 00:11:55,280 პლუს, და ბეჭდვითი argv, ინდექსი i. 204 00:11:55,280 --> 00:11:59,300 ასე რომ, ეს ნიმუში, კიდევ ერთხელ, ეს არის იგივე ნიმუში როგორც ადრე, გარდა ნაცვლად 205 00:11:59,300 --> 00:12:02,600 მოუწოდებდა ცვლადი n, ჩვენ გამოყენებით argc. 206 00:12:02,600 --> 00:12:09,520 >> ასე რომ, ეს iterating მეტი თითოეული ინდექსი მასივი, და დაბეჭდვის თითოეული 207 00:12:09,520 --> 00:12:11,910 ელემენტია, რომ მასივი. 208 00:12:11,910 --> 00:12:20,300 ასე რომ, როდესაც ჩვენ აწარმოებს ამ პროგრამის, ასევე, მე არ მიუთითოთ ნებისმიერი ბრძანების 209 00:12:20,300 --> 00:12:22,540 არგუმენტები, ასე რომ მხოლოდ ანაბეჭდები პროგრამის სახელი. 210 00:12:22,540 --> 00:12:26,053 იმ შემთხვევაში, თუ მე შევა bunch რამ, რომ თქვენ ბეჭდვა ერთი, თითოეული საკუთარი ხაზი. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 მოდით ამ ერთი ნაბიჯი შემდგომი. 214 00:12:34,770 --> 00:12:38,890 და ნაცვლად დაბეჭდვის თითოეული არგუმენტი საკუთარი ხაზი, მოდით ბეჭდვა თითოეული 215 00:12:38,890 --> 00:12:42,590 ხასიათი თითოეული არგუმენტი, საკუთარი ხაზი. 216 00:12:42,590 --> 00:12:46,700 ასე მახსოვს, რომ argv არის მასივი სტრიქონები. 217 00:12:46,700 --> 00:12:50,960 რა არის სიმებიანი, მაგრამ მასივი გმირები? 218 00:12:50,960 --> 00:12:57,140 ასე რომ, ეს ნიშნავს, რომ argv მართლაც მასივი მასივი სიმბოლო. 219 00:12:57,140 --> 00:13:04,920 ასე რომ, უპირატესობების, რომ მოდით იგნორირება ახლა. 220 00:13:04,920 --> 00:13:08,190 მოდით უბრალოდ განიხილოს სიმებიანი argv 0. 221 00:13:08,190 --> 00:13:14,170 >> ასე რომ, თუ ჩვენ გვინდა, რათა თითოეული ხასიათი argv 0 საკუთარი ხაზი, მაშინ მინდა 222 00:13:14,170 --> 00:13:19,500 გავაკეთოთ ნიმუში ჩვენ გამოიყენება, მე არის ნაკლებია, ვიდრე სიგრძეზე მასივი, 223 00:13:19,500 --> 00:13:23,990 რომელიც აქ არის strlen of, რომ არ რა მინდა, string 224 00:13:23,990 --> 00:13:26,450 s უდრის argv 0. 225 00:13:26,450 --> 00:13:30,390 ასე რომ ნაკლებია ხანგრძლივობა ჩვენი მასივი, რომელიც ამ შემთხვევაში არის მასივი 226 00:13:30,390 --> 00:13:34,410 გმირები, i plus plus. 227 00:13:34,410 --> 00:13:41,040 ასე რომ, როგორც დავინახეთ, გასულ კვირას, ეს იდეალური თუ ჩვენ გადაადგილება რომ strlen გარეთ 228 00:13:41,040 --> 00:13:45,210 მდგომარეობა მას შემდეგ, რაც n შეისწავლით strlen of s ყოველ ჯერზე ჩვენ წავიდეთ 229 00:13:45,210 --> 00:13:47,720 მეშვეობით loop, და ეს არ იქნება იცვლება. 230 00:13:47,720 --> 00:13:50,230 ამიტომ ჩვენ ვაყენებთ მას ტოლი n აქ. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 ახლა, ჩვენ iterating მეტი თითოეული მაჩვენებელი მასივი. 234 00:14:01,320 --> 00:14:05,630 ასე რომ, თუ ჩვენ გვინდა ბეჭდვა თითოეული ხასიათი რომ მასივი, პროცენტი გ არის 235 00:14:05,630 --> 00:14:06,880 დროშის ჩვენ გვინდა გამოვიყენოთ განთავსების სიმბოლო. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 და ახლა bracket i იქნება ტექსტი, index ხასიათი i, ასე რომ, თუ 238 00:14:19,770 --> 00:14:20,970 string იყო hello. 239 00:14:20,970 --> 00:14:27,530 მაშინ დრიურის 0 იქნება h, დრიურის bracket 1 იქნება e, და ასე შემდეგ. 240 00:14:27,530 --> 00:14:30,800 >> ახლა ჩვენ გვინდა გაერთიანდება ეს ორი რამ. 241 00:14:30,800 --> 00:14:35,440 ჩვენ გვინდა ბეჭდვა თითოეული ხასიათი თითოეული ბრძანების არგუმენტი. 242 00:14:35,440 --> 00:14:38,950 ამიტომ, ჩვენ ვაპირებთ აქვს წყობილი for loop. 243 00:14:38,950 --> 00:14:47,480 და პირობითად, პირველი counter მე, მომავალი იქნება j, n 244 00:14:47,480 --> 00:14:54,450 იქნება strlen of argv i, i ნაკლებია, ვიდრე n, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 და ახლა ნაცვლად ბეჭდვა argv i, ასე რომ, argv bracket i აპირებს ინდექსი - 247 00:15:06,870 --> 00:15:14,280 რომ აპირებს იყოს i-ე ბრძანების არგუმენტი, argv i, j აპირებს 248 00:15:14,280 --> 00:15:16,925 იყოს jth ხასიათი i-th არგუმენტი. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 მე თავი დაეღწია ამ up აქ არის რადგან ჩვენ ამას რომ loop. 251 00:15:24,810 --> 00:15:33,900 ასე რომ, უდრის string s შეადგენს argv i, და შემდეგ ნანახია bracket კ. 252 00:15:33,900 --> 00:15:36,980 >> ასევე, ჩვენ არ უნდა განაცხადოს ეს ცვლადი s. 253 00:15:36,980 --> 00:15:44,530 სამაგიეროდ, ჩვენ უბრალოდ დააკავშიროთ ამ ორი შევიდა, რაც ჩვენ გვქონდა, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> დინამიკები 1: [INAUDIBLE]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB ბოდენი: Good ზარი. 257 00:15:49,680 --> 00:15:52,936 ასე რომ ეს არის გატეხილი. 258 00:15:52,936 --> 00:15:55,510 თუ რეალურად გაიქცა ის, რომ ჩვენ მიხვდა ეს. 259 00:15:55,510 --> 00:16:01,210 ასე რომ counter მე აინტერესებს ამ განსაკუთრებით 260 00:16:01,210 --> 00:16:05,410 loop არის j, iterator. 261 00:16:05,410 --> 00:16:08,560 ასე რომ თქვენ არ გადაეყარონ საკითხები, ალბათ უსასრულო ციკლი, თუ ჩვენ 262 00:16:08,560 --> 00:16:09,540 არ იყო დაფიქსირებული, რომ. 263 00:16:09,540 --> 00:16:12,220 ამიტომ, ჩვენ ასევე საუბარი შესახებ გამართვის დღეს. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 მოდით აწარმოებს ამ პროგრამის. 266 00:16:15,240 --> 00:16:21,200 და მოდით რეალურად დაამატოთ ცალკე printf სწორედ აქ, რომ იქნება მხოლოდ ბეჭდვა 267 00:16:21,200 --> 00:16:27,480 მეორე ხაზი, რადგან ეს იმას ნიშნავს, რომ როდესაც ჩვენ გაუშვით პროგრამა, იქ იქნება ცარიელი 268 00:16:27,480 --> 00:16:31,830 ონლაინ შორის თითოეული ხასიათი თითოეული ბრძანების არგუმენტი. 269 00:16:31,830 --> 00:16:33,448 ისე, ჩვენ დავინახავთ, რას ნიშნავს ეს. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 Oop. 272 00:16:37,790 --> 00:16:39,870 რაღაც შეცდომა. 273 00:16:39,870 --> 00:16:42,860 შეცდომა მინიშნებით გამოცხადების ბიბლიოთეკის ფუნქცია strlen. 274 00:16:42,860 --> 00:16:51,630 >> ასე ბრუნდება ჩვენი პროგრამა, მე დაავიწყდა hash არის string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 ასე string.h იქნება header ფაილი, რომელიც აცხადებს, 277 00:16:57,730 --> 00:16:58,980 ფუნქცია strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, იგი ადგენს. 280 00:17:06,060 --> 00:17:09,109 ახლა, მოდით გაუშვით. 281 00:17:09,109 --> 00:17:10,930 ასე რომ, მხოლოდ, რომ. 282 00:17:10,930 --> 00:17:17,790 ის აპირებს ამობეჭდოთ ჩვენი პროგრამის სახელი, hello მსოფლიოში. 283 00:17:17,790 --> 00:17:23,510 ის აპირებს ბეჭდვა ყოველი ნივთი, თითოეული ხასიათი, საკუთარი ხაზი. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> მოდით რეალურად მიიღოს ამ ერთი ნაბიჯი შემდგომი. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 და ნაცვლად გამოყენებით string.h, მოდით ვიფიქროთ იმაზე, როგორ ჩვენ გვინდა განვახორციელოთ ჩვენი საკუთარი 288 00:17:39,700 --> 00:17:41,420 strlen ფუნქცია. 289 00:17:41,420 --> 00:17:45,600 ასე რომ მე დაუყოვნებლივ მისცეს ფუნქცია ხელმოწერით. 290 00:17:45,600 --> 00:17:52,900 მოდით მოვუწოდებთ my_strlen, და ეს აპირებს string როგორც არგუმენტი, 291 00:17:52,900 --> 00:17:57,220 და ჩვენ ველით, რომ დააბრუნოს ხანგრძლივობა რომ სიმებიანი. 292 00:17:57,220 --> 00:18:03,430 ასე რომ, სად არის, რომ ბიჭი? 293 00:18:03,430 --> 00:18:04,990 დიახ. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 ასე მახსოვს ადრე slide, რომ ასევე გასულ კვირას, რომ 296 00:18:12,900 --> 00:18:18,890 მასივი გმირები, ასევე, სიმებიანი, ასე ვთქვათ, ეს არის ჩვენი string s. 297 00:18:18,890 --> 00:18:29,870 ასე რომ, თუ არის string, hello, მაშინ, H-E-L-L-O, მეხსიერებაში, რომ აპირებს 298 00:18:29,870 --> 00:18:35,610 იყოს, და მაშინ ეს backslash 0 ხასიათი. 299 00:18:35,610 --> 00:18:39,170 >> ასე როგორ უნდა მიიღოს სიგრძეზე s? 300 00:18:39,170 --> 00:18:43,190 ისე, შეასრულა ეძებს ამ საწინააღმდეგოდ 0 ხასიათი, ეს null 301 00:18:43,190 --> 00:18:44,380 terminator. 302 00:18:44,380 --> 00:18:50,270 ასე ალგორითმი აპირებს უნდა იყოს რაღაც რამდენიმე 303 00:18:50,270 --> 00:18:51,510 საკმარისი გმირები, რომ - 304 00:18:51,510 --> 00:18:56,180 მოდით ამ მხრივ წარმოადგენს ზოგიერთი counter, მოდით მოვუწოდებთ ამ int სიგრძე. 305 00:18:56,180 --> 00:19:00,060 ასე რომ, დაწყებული აქ, ჩვენ აპირებს iterate მეტი ჩვენი სიმებიანი. 306 00:19:00,060 --> 00:19:04,100 >> ასე რომ, პირველი ხასიათი, ის H, და ის არ დაბრუნდა slash 0, ასე რომ 307 00:19:04,100 --> 00:19:05,170 სიგრძე არის 1. 308 00:19:05,170 --> 00:19:08,050 Iterate მომდევნო ხასიათი, E, და ეს არ backslash 0. 309 00:19:08,050 --> 00:19:09,630 სიგრძე არის 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 და ბოლოს, მივაღწევთ backslash 0, და ისე, რომ საშუალება, ასევე, 314 00:19:16,690 --> 00:19:17,780 ეს კონტექსტი დასრულდა. 315 00:19:17,780 --> 00:19:20,130 მოდით დაბრუნდება 5. 316 00:19:20,130 --> 00:19:33,630 >> ასე რომ, რეალურად ახორციელებს, რომ, პირველ რიგში, ჩემი n სიგრძე უდრის 0, ჩემი მარჯვენა ხელი. 317 00:19:33,630 --> 00:19:36,088 და ჩვენ ვაპირებთ iterate - 318 00:19:36,088 --> 00:19:38,000 >> დინამიკები 1: [INAUDIBLE] 319 00:19:38,000 --> 00:19:38,640 >> ROB ბოდენი: Oh, გადაღება. 320 00:19:38,640 --> 00:19:39,870 კარგი ზარი. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 ასე n სიგრძე უდრის 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 ახლა, ხოლო s ხანგრძლივობა არ თანაბარი და შემდეგ, backslash 0. 325 00:19:58,310 --> 00:20:04,660 ასე მახსოვს, ამ backslash 0, ეს არის ფაქტობრივი ხასიათი, და ეს მიანიშნებს 326 00:20:04,660 --> 00:20:05,820 ბოლოს string. 327 00:20:05,820 --> 00:20:09,850 ისევე, როგორც, ასევე, backslash n არის ფაქტობრივი ხასიათი. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 აპირებს მიუთითებს ბოლოს ჩვენი სიმებიანი. 329 00:20:14,040 --> 00:20:15,414 მე არ მინდა დააყენოს, რომ არსებობს. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 ხოლო ნანახია ინდექსირებული მიერ ხანგრძლივობა არ არის ტოლი null terminator, მაშინ 332 00:20:25,620 --> 00:20:27,130 ჩვენ უბრალოდ აპირებს ნამატი სიგრძე. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 ასე შემდეგ, დასასრულს ჩვენი პროგრამის, სიგრძე საბოლოოდ აპირებს 335 00:20:34,880 --> 00:20:37,610 იყოს 5 ამ შემთხვევაში. 336 00:20:37,610 --> 00:20:39,210 და ჩვენ უბრალოდ დააბრუნოს სიგრძეზე. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 ახლა ქვემოთ აქ, მე არ გავაკეთოთ my_strlen. 340 00:20:48,290 --> 00:20:50,700 მოდით კომპილირება, რათა დავრწმუნდეთ, ყველაფერი მუშაობს გამართულად. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 იყო მე აკეთებდა 2? 343 00:20:58,210 --> 00:21:00,565 ან იყო, რომ 1? 344 00:21:00,565 --> 00:21:01,940 ეს უნდა გავაკეთოთ. 345 00:21:01,940 --> 00:21:02,690 ყველა უფლება. 346 00:21:02,690 --> 00:21:08,490 ასე რომ, ეს არის argv 2. 347 00:21:08,490 --> 00:21:11,585 მუშაობს როგორც მოსალოდნელია, თუმცა, ის იყო, რომ მე გააკეთა? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 დიახ. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 ამ მობილური რამ არ აქვს printf ახალი ხაზი შემდეგ, მაგრამ ეს 352 00:21:21,820 --> 00:21:22,910 არ გაუკეთებია განსხვავება. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 ასე მუშაობდა როგორც მოსალოდნელია. 355 00:21:25,780 --> 00:21:34,750 >> ახლა ჩვენ შეგვიძლია კიდევ დააკავშიროთ ამ ერთი ნაბიჯით შემდგომ, სადაც გაფრთხილების აქ, ისევე, 356 00:21:34,750 --> 00:21:38,920 პირველი, ჩვენ grabbing strlen of argv i, და მაშინ ჩვენ iterating მეტი 357 00:21:38,920 --> 00:21:41,450 თითოეული პერსონაჟი რომ სიმებიანი. 358 00:21:41,450 --> 00:21:47,480 ასე რომ ნაცვლად აკეთებს, რომ, თუ ჩვენ უბრალოდ დააკავშიროთ ამ ლოგიკით ელოდება 359 00:21:47,480 --> 00:21:50,740 სანამ ჩვენ მოხვდა backslash 0 მარჯვენა ამ for loop? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 ასე რომ iterate ხოლო argv i, j აკეთებს არ არის ტოლი backslash 0. 362 00:22:07,490 --> 00:22:10,680 მოდით აწარმოებს პირველი. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> ყველა უფლება. 365 00:22:21,180 --> 00:22:27,655 ასე რომ აქ, ამ მდგომარეობაში ამბობს - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 მოდით გარკვევა, რომ. 368 00:22:40,060 --> 00:22:49,140 ახლა, მოდით ეს იყოს ჩვენი argv. 369 00:22:49,140 --> 00:22:55,290 ასე რომ, როდესაც მე უბრალოდ გაიქცა, რომ პროგრამა ადრე, argv არის მასივი სტრიქონები. 370 00:22:55,290 --> 00:23:03,100 ასე რომ, თუ მე გაუშვით dot slash argv 2, hello world, მაშინ argv 371 00:23:03,100 --> 00:23:07,650 თავისთავად სიგრძე 3, for argv ნულოვანი, hello, და მსოფლიოში. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> და შიგნით თითოეული ამ მაჩვენებლების თავად მასივი, სადაც ეს იქნება 374 00:23:19,660 --> 00:23:23,780 dot, ეს იქნება ხაზი, მე არ ვიცი იყო თუ არა სწორი მიმართულებით, I 375 00:23:23,780 --> 00:23:25,680 არ ვფიქრობ, რომ ეს იყო. 376 00:23:25,680 --> 00:23:30,110 A-R-V ტირე, საჭიროა უფრო მეტი სივრცე. 377 00:23:30,110 --> 00:23:32,570 მოდით მოჭრილი შევიდა ამ მასივი. 378 00:23:32,570 --> 00:23:38,230 A-R-V dash 0, და შემდეგ backslash 0. 379 00:23:38,230 --> 00:23:43,160 და მერე საგონებელში იქნება hello. 380 00:23:43,160 --> 00:23:45,910 ვთქვათ, H-E backslash 0. 381 00:23:45,910 --> 00:23:51,130 და ბოლოს, W-O backslash 0. 382 00:23:51,130 --> 00:23:59,730 >> ასე რომ, ალგორითმი, რომ ჩვენ უბრალოდ დაწერა, წყობილი ამისთვის მარყუჟების, რა ისინი 383 00:23:59,730 --> 00:24:07,321 აკეთებს, ჩვენ პირველად აქვს counter i და შემდეგ კ. 384 00:24:07,321 --> 00:24:15,206 ეს იქნება ადვილი კოდექსის ეკრანზე, მოდით დავუბრუნდეთ ამ. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 ასე რომ შეამჩნია, რომ მე არის iterator, რომ iterating მეტი თითოეული ბრძანება 387 00:24:24,600 --> 00:24:25,610 ხაზი არგუმენტი. 388 00:24:25,610 --> 00:24:28,870 და j არის iterator iterating მეტი თითოეული პერსონაჟი, რომ 389 00:24:28,870 --> 00:24:30,410 ბრძანების არგუმენტი. 390 00:24:30,410 --> 00:24:46,755 რა ეს innermost printf აკეთებს არის, ჩვენ printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1, printf argv 0 2 0 3 0 4 0 5 0 6, მაგრამ ახლა, argv 0 7 აპირებს 392 00:24:58,680 --> 00:25:00,670 თანაბარი backslash 0. 393 00:25:00,670 --> 00:25:05,730 >> ასე რომ მაშინ ჩვენ გასასვლელად რომ loop, და ახლა მე iterates 1. 394 00:25:05,730 --> 00:25:10,910 და ახლა ჩვენ ვაპირებთ ბეჭდვა argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 კარგად, ახლა, მას შემდეგ, რაც მე დაჭრილი მიესალმები მოკლედ, argv 1 2 კვლავ იქნება 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 ასე რომ, ნამატი მე და გაგრძელდება და ასე რომ, სანამ ჩვენ ამობეჭდოთ ყველა 398 00:25:25,050 --> 00:25:28,580 მსოფლიოში, და იმ სამი ბრძანების არგუმენტები და ჩვენ გასასვლელად გარეთ 399 00:25:28,580 --> 00:25:31,670 outermost მარყუჟი, და დასრულება ჩვენი პროგრამა. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> მოდით დავბრუნდებით აქ. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 ასე რომ თქვენ გარკვეული ცოდნა ბრძანების ხაზი არგუმენტები ამ 406 00:25:52,370 --> 00:25:54,460 განსაკუთრებული პრობლემა კომპლექტი. 407 00:25:54,460 --> 00:25:56,630 >> ახლა, გამართვის. 408 00:25:56,630 --> 00:26:01,680 ასე რომ თქვენ ალბათ უკვე უნდა გაეკეთებინათ ზოგიერთი გამართვის თქვენი წინა 409 00:26:01,680 --> 00:26:03,120 პრობლემა კომპლექტი. 410 00:26:03,120 --> 00:26:08,420 და ერთი ძალიან მარტივი გზა გამართვის, პირველ რიგში, მოდით შევხედოთ buggy პროგრამა. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 ისე, გავლით ამ პროგრამის ჩვენ ვაპირებთ, ვთხოვოთ მომხმარებელს 413 00:26:23,830 --> 00:26:29,350 რიცხვი, აითვისებდა, რომ რიცხვი, შემდეგ კი, უკანონოდ, ჩვენ გვაქვს ხოლო loop რომ 414 00:26:29,350 --> 00:26:32,280 უბრალოდ აპირებს decrement i სანამ ის ტოლი 10. 415 00:26:32,280 --> 00:26:35,820 მოდით უბრალოდ ვივარაუდოთ მე შემოსვლა რიცხვი აღემატება 10. 416 00:26:35,820 --> 00:26:38,700 ასე decrement i სანამ ის ტოლი 10. 417 00:26:38,700 --> 00:26:42,630 >> და მაშინ ჩვენ გვაქვს ერთი ხოლო loop რომ მაშინ, როდესაც მე არ თანაბარი 0, ჩვენ 418 00:26:42,630 --> 00:26:44,540 ვაპირებ decrement i 3. 419 00:26:44,540 --> 00:26:49,790 ასე რომ, თუ ხედავთ მიზანი bug აქ, ის, რომ ამ ყველაფერს decrement i to 420 00:26:49,790 --> 00:26:57,010 იყოს 10, და შემდეგ ამ ხოლო loop ნების decrement i 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 უარყოფითი 2, უარყოფითი 5, და ასე შემდეგ, უარყოფითი infinity, რადგან მე ამას 422 00:27:02,880 --> 00:27:05,920 არასოდეს რეალურად ტოლი 0. 423 00:27:05,920 --> 00:27:08,610 და შემდეგ დასასრულს ამ პროგრამის ჩვენ foo ფუნქცია რომელიც 424 00:27:08,610 --> 00:27:12,130 მიმდინარეობს print, რომ i. 425 00:27:12,130 --> 00:27:16,520 >> ასე რომ, ეს არის მოკლე და ტრივიალური პროგრამა, და bug აშკარაა, 426 00:27:16,520 --> 00:27:18,790 განსაკუთრებით მას შემდეგ, მე უბრალოდ განაცხადა რა bug იყო. 427 00:27:18,790 --> 00:27:24,840 მაგრამ განზრახვა აქ არის, კარგად, ეს შეიძლება რეალურად გამოიყურება ზოგიერთი თქვენი 428 00:27:24,840 --> 00:27:30,040 გადაწყვეტილებების ხარბ გასული პრობლემა კომპლექტი, და იქნებ თქვენ უნდა 429 00:27:30,040 --> 00:27:32,800 ზოგიერთი უსასრულო loop თქვენს პროგრამაში, და თქვენ არ ვიცი 430 00:27:32,800 --> 00:27:34,100 რა იწვევს მას. 431 00:27:34,100 --> 00:27:38,690 ასე რომ, ძალიან სასარგებლო debugging ტექნიკა არის უბრალოდ დაამატოთ printfs 432 00:27:38,690 --> 00:27:40,180 მთელი თქვენი კოდი. 433 00:27:40,180 --> 00:27:49,200 >> ასე რომ აქ მინდა printf გარეთ პირველი ხოლო loop. 434 00:27:49,200 --> 00:27:53,155 და აქ მე მინდა მყავდეს printf, და მე უბრალოდ ბეჭდვა i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 მე კი ამის პირველი ხოლო მარყუჟის, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 გარეთ, მეორე ხოლო loop. 439 00:28:09,040 --> 00:28:12,170 კიდევ ერთხელ, ბეჭდვა შიგნით აქ, ღირებულება i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 და მოდით აწარმოებს ამ. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> ასე dot slash გამართვის. 444 00:28:24,800 --> 00:28:25,610 შეიყვანეთ მთელი რიცხვი. 445 00:28:25,610 --> 00:28:28,150 მოდით 13. 446 00:28:28,150 --> 00:28:28,760 და ბუმი. 447 00:28:28,760 --> 00:28:33,300 ჩვენ ვხედავთ, რომ ჩვენ უსასრულო looping შიგნით მეორე ხოლო loop. 448 00:28:33,300 --> 00:28:36,305 ახლა ჩვენ ვიცით, რა bug არის. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 მაგრამ printf გამართვის სრულიად დიდი, მაგრამ ერთხელ თქვენი პროგრამების მისაღებად 451 00:28:45,610 --> 00:28:50,560 აღარ და უფრო რთული, არსებობს უფრო დახვეწილი გადაწყვეტილებები 452 00:28:50,560 --> 00:28:51,705 მიღების რამ მუშაობს. 453 00:28:51,705 --> 00:28:52,955 მოდით ამოიღონ ყველა ამ printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 და მოდით დავრწმუნდეთ, მე არ შესვენება არაფერი. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> ასე რომ, პროგრამა, ჩვენ ვაპირებთ დანერგვა ეწოდება 458 00:29:14,180 --> 00:29:16,715 GDB, განთავსების GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 ისე, რეალურად, მოდით ამოიღონ გამართვის for მეორე, და გამართვის ერთხელ. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 ისე, რეალურად, პირველ რიგში, კარგი გაკვეთილი ამ ბრძანების არგუმენტები. 463 00:29:34,440 --> 00:29:37,780 გაითვალისწინეთ, რომ ეს Clang ბრძანება, რომ არის შედგენის ყველაფერი მიმდინარეობს გავიდა 464 00:29:37,780 --> 00:29:41,300 ბრძანებათა ზოლს, ამ ბრძანების არგუმენტები. 465 00:29:41,300 --> 00:29:46,250 ასე ზუსტად, თუ როგორ ვაპირებთ იყოს გამოყენებით ბრძანების ხაზი არგუმენტები, როგორც ჩვენ 466 00:29:46,250 --> 00:29:51,500 აქამდე, და თქვენ ნება pset 2, ასე Clang გამოყენებით მათ. 467 00:29:51,500 --> 00:30:00,070 >> ასე რომ შეამჩნია, რომ ეს პირველი დროშა, ტირე ggdb3, რა, რომ ვამბობ, არის, Clang, 468 00:30:00,070 --> 00:30:03,790 თქვენ უნდა შეადგინონ ამ ფაილის განზრახვა, რომ ჩვენ საბოლოოდ 469 00:30:03,790 --> 00:30:05,380 უნდა გამართვის იგი. 470 00:30:05,380 --> 00:30:13,840 ასე რომ, სანამ თქვენ, რომ დროშა, მაშინ ჩვენ შეგვიძლია GDB გამართვის. 471 00:30:13,840 --> 00:30:17,380 და ეს კიდე ქმნის GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> ასე რომ, არსებობს ბევრი ბრძანებები რომ თქვენ უნდა შეეგუოს. 473 00:30:22,920 --> 00:30:27,100 პირველი, რომ თქვენ ალბათ სასწრაფოდ გვჭირდება Run. 474 00:30:27,100 --> 00:30:28,200 ასე რომ, რა გაუშვით აპირებს? 475 00:30:28,200 --> 00:30:30,910 ის აპირებს დაიწყოს ჩვენი პროგრამა. 476 00:30:30,910 --> 00:30:36,180 ასე აწარმოებს, დაწყებული პროგრამა, პროგრამა გვთხოვს განთავსების რიცხვი, 13. 477 00:30:36,180 --> 00:30:39,170 და შემდეგ ეს უსასრულო looping როგორც მოსალოდნელია, გარდა მე ამოღებულ 478 00:30:39,170 --> 00:30:40,500 printfs, ასე რომ, ჩვენ კი არ ვხედავ, რომ. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 დასრულების ნორმალურად. 481 00:30:44,600 --> 00:30:45,850 Oh. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 შესაძლებელია, რომ ეს გახვეული ყველა პირიქით, უკან - იგნორირება, რომ. 484 00:30:53,640 --> 00:30:55,170 ვივარაუდოთ, რომ ეს არ გაითიშება ნორმალურად. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 არსებობს რთული პასუხი რომ. 487 00:31:03,370 --> 00:31:07,890 >> ახლა, ეს არ არის ძალიან სასარგებლო. 488 00:31:07,890 --> 00:31:11,480 ასე რომ, უბრალოდ გაშვებული ჩვენი პროგრამა შიგნით ამ debugger არ დაგვეხმარება ნებისმიერ 489 00:31:11,480 --> 00:31:15,610 სხვათა შორის, მას შემდეგ, რაც ჩვენ შეგვეძლო უბრალოდ გაკეთდეს dot slash გამართვის გარედან GDB. 490 00:31:15,610 --> 00:31:21,250 ასე რომ, ერთი ბრძანება, რომ თქვენ ალბათ - 491 00:31:21,250 --> 00:31:22,970 და მე ვტოვებ ამ. 492 00:31:22,970 --> 00:31:25,850 Control-d ან დატოვა, როგორც მუშაობა. 493 00:31:25,850 --> 00:31:29,550 მოდით გასახსნელად ისევ. 494 00:31:29,550 --> 00:31:31,130 >> სხვა ბრძანება, რომ თქვენ ალბათ დაუყოვნებლივ სურს 495 00:31:31,130 --> 00:31:33,600 შეეგუება არის Break. 496 00:31:33,600 --> 00:31:37,120 ასე რომ, ჩვენ შესვენება მთავარ ახლა, და შემდეგ მე ახსნას რომ. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 ისე, აქ ჩვენ ვხედავთ ჩვენ მითითებული breakpoint ამ ხაზის debug.c. 499 00:31:46,370 --> 00:31:50,160 ასე რომ, რა შესვენების იმას ნიშნავს, რომ როდესაც მე აკრიფოთ პერსპექტივაში, პროგრამა აპირებს 500 00:31:50,160 --> 00:31:53,560 გაგრძელდება გაშვებული სანამ მე მოხვდა breakpoint. 501 00:31:53,560 --> 00:31:59,390 ასე რომ, როდესაც მე მოხვდა ტირაჟი, პროგრამა იწყება, და მაშინ იგი არღვევს, როგორც კი 502 00:31:59,390 --> 00:32:01,940 შემოდის მთავარი ფუნქცია. 503 00:32:01,940 --> 00:32:06,930 შესვენება მთავარ იქნება რაღაც თქვენ საკმაოდ ხშირად გააკეთოს. 504 00:32:06,930 --> 00:32:11,340 >> და ახლა, წარმოგიდგინოთ ზოგიერთი უფრო ბრძანებები. 505 00:32:11,340 --> 00:32:14,330 ყურადღება მიაქციეთ, რომ აქ, რომ ის ამბობდა ჩვენ მა ერთი ხაზი 11, რომელიც 506 00:32:14,330 --> 00:32:16,230 printf, მიუთითოთ მთელი რიცხვი. 507 00:32:16,230 --> 00:32:21,260 ასე რომ ბრძანება შემდეგი იქნება, თუ როგორ ჩვენ წასვლა მომდევნო ხაზი კოდი. 508 00:32:21,260 --> 00:32:24,810 ეს აპირებს საშუალებას მოგვცემს ნაბიჯ ჩვენი პროგრამა ხაზს. 509 00:32:24,810 --> 00:32:26,260 ასე შემდეგ. 510 00:32:26,260 --> 00:32:29,820 >> ახლა ხაზი 12, ჩვენ ვაპირებთ მიიღოს რიცხვი. 511 00:32:29,820 --> 00:32:30,450 შემდეგი. 512 00:32:30,450 --> 00:32:34,290 და თუ უბრალოდ დააჭიროთ ერთხელ, ეს თქვენ მომხმარებელი ბოლო რაც თქვენ გააკეთეთ. 513 00:32:34,290 --> 00:32:36,480 ასე რომ მე არ უნდა აკრიფოთ მომდევნო ყოველ ჯერზე. 514 00:32:36,480 --> 00:32:40,100 ასე რომ შევა რიცხვი, 13. 515 00:32:40,100 --> 00:32:46,940 ახლა, line 14, ხოლო i დიდია მეტი 10, და მე გავაკეთოთ შემდეგი. 516 00:32:46,940 --> 00:32:48,685 და ჩვენ ვხედავთ, ჩვენ ვაპირებთ decrement i. 517 00:32:48,685 --> 00:32:50,210 ამიტომ, ჩვენ ვაპირებთ, რომ decrement i ერთხელ. 518 00:32:50,210 --> 00:32:53,620 >> ახლა, კიდევ ერთი სასარგებლო ბრძანება ბეჭდვა. 519 00:32:53,620 --> 00:32:55,750 ასე დაბეჭდილი აპირებს ამობეჭდოთ ღირებულება ცვლადი. 520 00:32:55,750 --> 00:32:57,825 მოდით მოუტანს out ღირებულება ცვლადი i. 521 00:32:57,825 --> 00:32:58,705 მოდით ბეჭდვა i. 522 00:32:58,705 --> 00:33:00,910 იგი აპირებს ამბობენ, მე 11. 523 00:33:00,910 --> 00:33:03,330 ახლა ჩვენ შემდეგი ერთხელ ხოლო i მეტია 10. 524 00:33:03,330 --> 00:33:05,590 ასე რომ კიდევ უფრო მეტია, ვიდრე 10, რადგან 11. 525 00:33:05,590 --> 00:33:06,920 i მინუს მინუს. 526 00:33:06,920 --> 00:33:08,250 მოდით ბეჭდვა i ერთხელ. 527 00:33:08,250 --> 00:33:10,950 როგორც მოსალოდნელი იყო, ეს 10. 528 00:33:10,950 --> 00:33:12,510 >> ახლა, მომდევნო. 529 00:33:12,510 --> 00:33:16,250 ის ბრუნდება მდგომარეობაში, მე უფრო მეტი, ვიდრე 10, მაგრამ არის 10, ასე რომ, 530 00:33:16,250 --> 00:33:20,040 ეს არ აღემატება 10, ამიტომ ჩვენ ველით, მას ცვენას ხოლო loop. 531 00:33:20,040 --> 00:33:22,220 და ახლა ჩვენ ქვემოთ რომ ხაზი კოდი. 532 00:33:22,220 --> 00:33:28,750 და კიდევ ერთი ბრძანება, სია, უბრალოდ აპირებს არიან წინა და შემდეგი 533 00:33:28,750 --> 00:33:31,240 რამდენიმე ხაზი კოდი, თუ დაკარგული თავს. 534 00:33:31,240 --> 00:33:35,420 ასე რომ, ჩვენ მხოლოდ დასრულების ამ ხოლო მარყუჟის, და ახლა ჩვენ შევედით ამ 535 00:33:35,420 --> 00:33:37,080 ხოლო მარყუჟის, ხაზი 18. 536 00:33:37,080 --> 00:33:39,860 ასე რომ სანამ მე არ თანაბარი 0. 537 00:33:39,860 --> 00:33:46,570 და შემდეგი, მე შეადგენს i მინუს 3, და ჩვენ შეამჩნია, ამ ყველაფერს მხოლოდ შენარჩუნებას აპირებს. 538 00:33:46,570 --> 00:33:48,270 და ჩვენ შეგვიძლია ბეჭდვა i. 539 00:33:48,270 --> 00:33:49,990 >> თითოეული ბრძანება სახის აქვს კომბინაციები. 540 00:33:49,990 --> 00:33:51,720 ასე რომ p არის მოკლე დაბეჭდილი. 541 00:33:51,720 --> 00:33:53,400 ასე რომ ჩვენ შეგვიძლია p i. 542 00:33:53,400 --> 00:33:57,550 უბრალოდ შეინახოს ჩატარების n, ან აკეთეთ შემდეგი. 543 00:33:57,550 --> 00:33:58,340 ბეჭდვა i ერთხელ. 544 00:33:58,340 --> 00:34:00,380 ხედავთ ახლა ეს ნეგატიური 167. 545 00:34:00,380 --> 00:34:06,030 ასე რომ, ეს გაგრძელდება სამუდამოდ, მაგრამ არა მართლაც სამუდამოდ, რადგან თქვენ უბრალოდ დაინახა, რომ 546 00:34:06,030 --> 00:34:09,330 რეალურად დასრულდება რაღაც მომენტში. 547 00:34:09,330 --> 00:34:15,699 >> ასე რომ გემო GDB. 548 00:34:15,699 --> 00:34:19,504 მაგრამ მოდით გავაკეთოთ კიდევ ერთი რამ GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, გამართვის. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 ასე რომ, ამ კონკრეტულ შემთხვევაში, უსასრულო loop მოხდა იყოს შიგნით 552 00:34:28,534 --> 00:34:30,050 ძირითადი ფუნქცია. 553 00:34:30,050 --> 00:34:35,779 და ახლა, მხოლოდ მიიღოს, რომ, რომ მე ვარ აპირებს გადავიდეს უსასრულო loop შევიდა 554 00:34:35,779 --> 00:34:37,029 foo ფუნქცია. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 უბრალოდ გვახსოვდეს, რომ, ბოლოს ამ პროგრამა, ასევე, ამ თავდაპირველად 557 00:34:43,730 --> 00:34:46,210 მოუწოდებს foo, რომელიც მხოლოდ აპირებს ბეჭდვა i. 558 00:34:46,210 --> 00:34:51,880 მაგრამ ახლა ჩვენ მოუწოდებენ foo, რომელიც ვაპირებ decrement i სანამ ეს 0, და 559 00:34:51,880 --> 00:34:54,548 შემდეგ ბეჭდვა, რომ ცვლადი. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 გადავარჩინოთ რომ. 562 00:34:57,970 --> 00:35:00,175 რათა გამართვის. 563 00:35:00,175 --> 00:35:03,310 და ახლა, GDB გამართვის. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> ასე რომ, თუ მე უბრალოდ გაუშვით მაშინ მე არ ვაპირებ შეძლებენ რეალურად დაიხევს მეშვეობით my 566 00:35:10,580 --> 00:35:11,730 პროგრამა line-by-line. 567 00:35:11,730 --> 00:35:19,820 მოდით შესვენება მთავარ, და შემდეგ აკრიფოთ პერსპექტივაში. 568 00:35:19,820 --> 00:35:28,160 ასე რომ წავიდეთ ამ გზით, printf, შეიყვანოთ მთელი რიცხვი, მიიღოთ რიცხვი, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 ამიტომ, ჩვენ ვაპირებთ, რომ შევინარჩუნოთ decrementing სანამ მე მეტია 10. 571 00:35:37,490 --> 00:35:42,840 მაშინ ჩვენ ვაპირებთ დაეცემა მეშვეობით ხოლო მარყუჟის, და მიიღეთ ხაზი - 572 00:35:42,840 --> 00:35:44,364 მოდით გასახსნელად up ცალკე ფანჯარაში. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 ასე რომ, ჩვენ decremented სანამ მე აღარ მეტი 10 და შემდეგ ჩვენ 575 00:35:53,300 --> 00:35:55,700 მოუწოდა ფუნქცია, foo. 576 00:35:55,700 --> 00:36:01,340 >> მერე რა მოხდა, როგორც კი მოხვდა ფუნქცია foo, ასევე, მე ე.წ. foo, და 577 00:36:01,340 --> 00:36:04,030 მაშინ მე აღარ ჰქონდა კონტროლის GDB. 578 00:36:04,030 --> 00:36:10,230 ასე რომ, როგორც კი მოხვდა შემდეგი ამ ხაზი, ყველაფერი გაგრძელდა ეს მოხდა, 579 00:36:10,230 --> 00:36:12,400 სადაც პროგრამის დასრულების როდის - 580 00:36:12,400 --> 00:36:14,450 ვივარაუდოთ, რომ ეს არ არსებობს საბოლოოდ. 581 00:36:14,450 --> 00:36:16,390 თქვენ ნახეთ, რომ პაუზის ცოტა, თუმცა. 582 00:36:16,390 --> 00:36:22,040 ასე რომ, რატომ დაკარგავს კონტროლს პროგრამა იმ ეტაპზე? 583 00:36:22,040 --> 00:36:27,540 ისე, როდესაც მე აკრიფოთ მომდევნო, რომ მიდის ლიტერატურული შემდეგი ხაზი კოდი, რომ 584 00:36:27,540 --> 00:36:28,850 განახორციელებს. 585 00:36:28,850 --> 00:36:35,950 ასე შემდეგ ხაზი 21 შემდეგი ხაზი კოდი რომ განახორციელებს არის ხაზი 22, 586 00:36:35,950 --> 00:36:38,520 რომელიც, არსებული მთავარი. 587 00:36:38,520 --> 00:36:43,810 ასე რომ, მე არ მინდა, რომ უბრალოდ მომდევნო ხაზი კოდი. 588 00:36:43,810 --> 00:36:48,170 მინდა წასვლას ფუნქცია, foo, და შემდეგ ასევე დაიხევს მეშვეობით 589 00:36:48,170 --> 00:36:49,830 იმ ხაზების კოდი. 590 00:36:49,830 --> 00:36:53,726 >> ასე რომ, ჩვენ გვაქვს ალტერნატივა. 591 00:36:53,726 --> 00:36:56,770 მოდით დატოვა, რომ ერთხელ. 592 00:36:56,770 --> 00:36:58,020 დაარღვიე მთავარი. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, შემდეგი, მომდევნო, 13, შემდეგი, შემდეგი, მომდევნო, ფრთხილად, 595 00:37:06,370 --> 00:37:09,820 სანამ ჩვენ მოხვდა ხაზი foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> ახლა, ჩვენ დროს ხაზი 21, სადაც ჩვენ მოვუწოდებთ foo. 598 00:37:13,700 --> 00:37:17,100 ჩვენ არ გვინდა, აკრიფოთ შემდეგ, მას შემდეგ, უბრალოდ მოვუწოდებთ ფუნქცია foo, და 599 00:37:17,100 --> 00:37:18,710 წასვლა მომდევნო ხაზი კოდი. 600 00:37:18,710 --> 00:37:20,840 ის, რაც ჩვენ გვინდა გამოვიყენოთ არის ნაბიჯი. 601 00:37:20,840 --> 00:37:25,690 ასე რომ არსებობს განსხვავება ნაბიჯი და შემდეგი, სადაც Step ნაბიჯები შევიდა 602 00:37:25,690 --> 00:37:28,190 ფუნქცია, და შემდეგი მიდის მეტი ფუნქცია. 603 00:37:28,190 --> 00:37:32,830 უბრალოდ ახორციელებს მთლიანად ფუნქცია და ინახავს აპირებს. 604 00:37:32,830 --> 00:37:37,210 >> ასე ნაბიჯი აპირებს მიგვიყვანს შევიდა ფუნქცია, foo. 605 00:37:37,210 --> 00:37:41,160 და ჩვენ ვხედავთ, აქ, ახლა, ჩვენ უკან ეს მაშინ, როცა მარყუჟის, რომ, თეორიულად, 606 00:37:41,160 --> 00:37:44,190 აპირებს გაგრძელდება სამუდამოდ. 607 00:37:44,190 --> 00:37:50,420 და თუ მოხვდა ნაბიჯი, როდესაც ის კი არ არის ფუნქცია მოვუწოდებთ, მაშინ ეს 608 00:37:50,420 --> 00:37:51,720 იდენტური შემდეგი. 609 00:37:51,720 --> 00:37:55,320 ასე რომ, ეს მხოლოდ მაშინ, როდესაც თქვენ ხაზი, მოუწოდებდა ფუნქცია, რომელიც ნაბიჯი 610 00:37:55,320 --> 00:37:56,970 აპირებს განსხვავდება შემდეგი. 611 00:37:56,970 --> 00:37:57,930 ასე ნაბიჯ მიგვიყვანს აქ. 612 00:37:57,930 --> 00:38:02,100 ნაბიჯი, ნაბიჯი, ნაბიჯი, ნაბიჯი, ნაბიჯი, ნაბიჯი, და ჩვენ უბრალოდ უსასრულო loop სამუდამოდ. 613 00:38:02,100 --> 00:38:06,810 >> ასე რომ თქვენ შეიძლება შეეგუოს, რომ როგორც თქვენი გზა საიდენტიფიკაციო უსასრულო მარყუჟების, არის 614 00:38:06,810 --> 00:38:08,960 უბრალოდ ჩატარების ამ შეიყვანეთ გასაღები ვხედავ, სადაც თქვენ მიიღებთ დავრჩებოდით. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 არსებობს უკეთესი გზა ამის გაკეთება, მაგრამ ახლა, რომ სავსებით საკმარისია. 617 00:38:14,780 --> 00:38:17,967 და სტილისტურად, შეესაბამებოდეს სტილი 50, მე უნდა გაკეთდეს ეს. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> ასე რომ ერთი ბოლო ბრძანება გააცნოს. 621 00:38:28,400 --> 00:38:30,810 კარგად, მოდით GDB გამართვის შემოსული 622 00:38:30,810 --> 00:38:35,580 ასე რომ ნაცვლად არღვევს მთავარ, თუ იცით foo ფუნქცია ასევე არის 623 00:38:35,580 --> 00:38:39,230 პრობლემა, მაშინ მე ვერ მხოლოდ განაცხადა, შესვენება foo, ნაცვლად. 624 00:38:39,230 --> 00:38:42,310 ვთქვათ მე შესვენება ორივე ძირითადი და foo. 625 00:38:42,310 --> 00:38:45,390 ასე რომ, შეგიძლიათ, როგორც ბევრი breakpoints როგორც თქვენ გსურთ. 626 00:38:45,390 --> 00:38:49,230 როდესაც მე აკრიფოთ პერსპექტივაში, ის აპირებს შეჩერება - 627 00:38:49,230 --> 00:38:52,180 ooh, მოდით recompile, რადგან მე შეიცვალა ყველაფერი. 628 00:38:52,180 --> 00:38:55,950 თქვენ ნახავთ ამ ხაზის Warning წყარო ფაილი ბოლოდროინდელი გარდა გაშვება. 629 00:38:55,950 --> 00:38:59,680 ასე რომ, ეს ნიშნავს, რომ მე უბრალოდ წავიდა აქ და შეიცვალა ამ შეესაბამებოდეს სტილი 630 00:38:59,680 --> 00:39:03,100 50, მაგრამ მე არ recompile პროგრამა. 631 00:39:03,100 --> 00:39:04,870 ასე GDB მაიძულებს იცის, რომ. 632 00:39:04,870 --> 00:39:10,130 მე დატოვა, რათა გამართვის ერთხელ, მოხვდა GDB გამართვის. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> ახლა, უკან რა იყო აკეთებს. 635 00:39:12,800 --> 00:39:15,720 შესვენება მთავარ, შესვენების foo. 636 00:39:15,720 --> 00:39:20,680 ახლა თუ პროგრამის გაშვება, ამიტომ აპირებს გაგრძელდება მანამ, სანამ ჰიტები 637 00:39:20,680 --> 00:39:21,320 breakpoint. 638 00:39:21,320 --> 00:39:24,680 რომ breakpoint ხდება იყოს პირველი ერთი მთავარი. 639 00:39:24,680 --> 00:39:28,630 ახლა, ნაცვლად აკეთებს შემდეგი, მომდევნო, შემდეგი, შემდეგი, მომდევნო, სანამ მოხვდა foo, I 640 00:39:28,630 --> 00:39:35,230 შეგიძლიათ აკრიფოთ გაგრძელდება, რომელიც გააგრძელებს სანამ არ მოხვდა შემდეგი breakpoint. 641 00:39:35,230 --> 00:39:37,200 მე უნდა მიუთითოთ რიცხვი პირველი. 642 00:39:37,200 --> 00:39:40,570 გაგრძელდება გაგრძელდება მანამ, სანამ მოხვდა შემდეგი breakpoint, რომელიც არის ის, რომ 643 00:39:40,570 --> 00:39:43,320 ფუნქცია foo. 644 00:39:43,320 --> 00:39:50,130 >> ასე რომ Run გაგრძელდება თქვენ მოხვდა breakpoint, მაგრამ თქვენ მხოლოდ აკრიფოთ როცა 645 00:39:50,130 --> 00:39:54,060 თქვენ დაწყებული პროგრამა, და შემდეგ, მას შემდეგ, ის გაგრძელდება. 646 00:39:54,060 --> 00:40:01,950 იმ შემთხვევაში, თუ მე მხოლოდ გააკეთა შესვენება ძირითადი და შემდეგ გაიქცა, იგი ყველაფერს შესვენება 647 00:40:01,950 --> 00:40:03,670 მთავარი, და შემდეგ გააგრძელოს. 648 00:40:03,670 --> 00:40:10,050 მას შემდეგ, რაც მე არ მაქვს შესვენების წერტილი foo, შეიყვანეთ მთელი რიცხვი, მაშინ ახლა მე 649 00:40:10,050 --> 00:40:11,380 არ აპირებს დაარღვიოს at foo. 650 00:40:11,380 --> 00:40:16,318 ის უბრალოდ აპირებს უსასრულო loop მანამდე. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> ასე რომ Intro to GDB. 654 00:40:24,420 --> 00:40:27,790 თქვენ უნდა დაიწყოს გამოყენებით, თქვენი პრობლემა კომპლექტი. 655 00:40:27,790 --> 00:40:30,550 ეს შეიძლება იყოს ძალიან სასარგებლო იდენტიფიცირება შეცდომები. 656 00:40:30,550 --> 00:40:35,280 თუ თქვენ რეალურად მხოლოდ, line-by-line, წავიდეთ თქვენი კოდი და შედარება რა არის 657 00:40:35,280 --> 00:40:39,740 რეალურად ხდება ის, რაც თქვენ ველით უნდა მოხდეს, მაშინ ეს საკმაოდ 658 00:40:39,740 --> 00:40:41,060 ძნელია გამოგრჩეთ თქვენი შეცდომები. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> ასე რომ, გასულ კვირას დავით აღიზარდოს ამ საიდუმლო გასაღები კრიპტოგრაფიის პერსონალის 663 00:40:54,040 --> 00:40:59,350 პირველად, სადაც ჩვენ არ გვინდა, პაროლები უბრალოდ უნდა ინახება ჩვენს 664 00:40:59,350 --> 00:41:03,210 კომპიუტერული ზოგიერთ უბრალო ტექსტური ფაილი, სადაც ვინმე გადმოდიოდნენ და მხოლოდ 665 00:41:03,210 --> 00:41:04,660 გახსნა ეს და წაიკითხოთ. 666 00:41:04,660 --> 00:41:07,530 იდეალურ შემთხვევაში, ისინი დაშიფრული რამდენიმე გზა. 667 00:41:07,530 --> 00:41:13,340 და პრობლემა Set 2, თქვენ უნდა საქმე ერთი მეთოდი დაშიფვრის, 668 00:41:13,340 --> 00:41:16,520 ან, ასევე, ორი მეთოდები, მაგრამ ისინი არც თუ ისე დიდი. 669 00:41:16,520 --> 00:41:20,050 თუ თქვენ ჰაკერი გამოცემა, თქვენ ასევე ვაპირებთ იყოს საქმე 670 00:41:20,050 --> 00:41:22,150 გაშიფვრის დროს მოხდენილი ზოგიერთი რამ. 671 00:41:22,150 --> 00:41:29,770 >> ასე რომ, ეს საკითხი არის, ასევე, მაშინაც კი, თუ ჩვენ ძლიერი შიფრირების 672 00:41:29,770 --> 00:41:34,830 ალგორითმი მსოფლიოში, თუ თქვენ განსაკუთრებით ცუდი დაგავიწყდათ, მაშინ იგი 673 00:41:34,830 --> 00:41:37,720 არ დაგეხმარებათ ძალიან ბევრი, რადგან ხალხი მაინც შეძლებს გაერკვნენ ის. 674 00:41:37,720 --> 00:41:41,530 მაშინაც კი, თუ ხედავს, რომ დაშიფრული სიმებიანი და ეს ჰგავს სასადილო ნაგავი 675 00:41:41,530 --> 00:41:44,760 ეს ნიშნავს, რომ არაფერი, თუ ისინი კიდევ უბრალოდ უნდა შევეცადოთ რამდენიმე პაროლები 676 00:41:44,760 --> 00:41:50,560 გაერკვნენ ის, მაშინ არ არის ძალიან უსაფრთხო. 677 00:41:50,560 --> 00:41:55,890 ასე რომ, თვალს ვიდეო, ხდის, რომ წერტილი. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [ვიდეო აღწარმოების] 680 00:42:00,970 --> 00:42:02,100 >> -მუზარადი, თქვენ ჯოჯოხეთის განსახიერება. 681 00:42:02,100 --> 00:42:03,370 რა ხდება? 682 00:42:03,370 --> 00:42:05,170 რას აკეთებთ ჩემი ქალიშვილი? 683 00:42:05,170 --> 00:42:09,910 >> -ნებართვა ჩემთვის წარმოგიდგინოთ ბრწყინვალე ახალგაზრდა პლასტიკური ქირურგი, დოქტორი ფილიპ 684 00:42:09,910 --> 00:42:13,730 Schlotkin, ყველაზე დიდი ცხვირი სამუშაო ადამიანი მთელი 685 00:42:13,730 --> 00:42:16,080 სამყარო, და Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Your Highness. 687 00:42:17,210 --> 00:42:18,070 >> ცხვირი სამუშაო? 688 00:42:18,070 --> 00:42:18,670 მე არ მესმის. 689 00:42:18,670 --> 00:42:20,090 ის უკვე ჰქონდა ცხვირი სამუშაო. 690 00:42:20,090 --> 00:42:21,910 ეს იყო ტკბილი თექვსმეტი დღემდე. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 ის არ არის რაც ფიქრობთ. 693 00:42:23,690 --> 00:42:25,420 ეს ბევრად, ბევრად უარესი. 694 00:42:25,420 --> 00:42:30,300 თუ არ მომეცი კომბინაცია საჰაერო ფარი, დოქტორ Schlotkin იქნება 695 00:42:30,300 --> 00:42:34,226 მისცეს თქვენი ქალიშვილი უკან თავის ძველ ცხვირი. 696 00:42:34,226 --> 00:42:35,476 >> -No. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 სად კიდევ რომ? 699 00:42:40,516 --> 00:42:41,440 >> -All უფლება. 700 00:42:41,440 --> 00:42:42,180 მე გეტყვით. 701 00:42:42,180 --> 00:42:43,381 მე გეტყვით. 702 00:42:43,381 --> 00:42:44,263 არა, daddy. 703 00:42:44,263 --> 00:42:45,590 არა, თქვენ არ უნდა. 704 00:42:45,590 --> 00:42:46,860 >> -You're უფლება, ჩემო ძვირფასო. 705 00:42:46,860 --> 00:42:48,450 მე მენატრება შენი ახალი ცხვირი. 706 00:42:48,450 --> 00:42:52,090 მაგრამ მე არ ვუთხრა მას კომბინაცია, არ აქვს მნიშვნელობა რა. 707 00:42:52,090 --> 00:42:53,680 >> -ძალიან კარგად. 708 00:42:53,680 --> 00:42:55,685 დოქტორი Schlotkin, თქვენი უარესი. 709 00:42:55,685 --> 00:42:56,914 >> -ჩემი სიამოვნება. 710 00:42:56,914 --> 00:43:00,690 >> [ინსტრუმენტები მიმდინარეობს sharpened] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 დაველოდოთ. 713 00:43:02,520 --> 00:43:03,836 დაველოდოთ. 714 00:43:03,836 --> 00:43:05,300 მე გეტყვით. 715 00:43:05,300 --> 00:43:06,880 მე გეტყვით. 716 00:43:06,880 --> 00:43:09,130 >> მე ვიცოდი, რომ ეს იმუშავებს. 717 00:43:09,130 --> 00:43:09,900 ყველა უფლება. 718 00:43:09,900 --> 00:43:12,850 Give it to me. 719 00:43:12,850 --> 00:43:16,918 >> -კომბინაცია არის ერთი. 720 00:43:16,918 --> 00:43:17,406 >> -One. 721 00:43:17,406 --> 00:43:18,382 >> -One. 722 00:43:18,382 --> 00:43:19,358 >> -ორი. 723 00:43:19,358 --> 00:43:19,846 >> -ორი. 724 00:43:19,846 --> 00:43:20,822 >> -ორი. 725 00:43:20,822 --> 00:43:21,310 >> სამი. 726 00:43:21,310 --> 00:43:21,798 >> სამი. 727 00:43:21,798 --> 00:43:22,774 >> სამი. 728 00:43:22,774 --> 00:43:23,262 >> ოთხი. 729 00:43:23,262 --> 00:43:23,750 >> ოთხი. 730 00:43:23,750 --> 00:43:26,150 >> ოთხი. 731 00:43:26,150 --> 00:43:27,010 >> ხუთი. 732 00:43:27,010 --> 00:43:27,670 >> ხუთი. 733 00:43:27,670 --> 00:43:29,010 >> ხუთი. 734 00:43:29,010 --> 00:43:34,770 >> -So კომბინაცია არის ერთი, ორი, სამი, ოთხი, ხუთი. 735 00:43:34,770 --> 00:43:37,460 სწორედ stupidest მოედანზე მე ოდესმე მსმენია ჩემს ცხოვრებაში. 736 00:43:37,460 --> 00:43:39,710 სწორედ ასეთი რამ იდიოტი ექნება თავისი ბარგი. 737 00:43:39,710 --> 00:43:42,000 >> -მადლობა, თქვენი უდიდებულესობა. 738 00:43:42,000 --> 00:43:43,530 >> რას აკეთებთ? 739 00:43:43,530 --> 00:43:44,490 >> -I გამორთულია კედელი. 740 00:43:44,490 --> 00:43:45,420 >> -No თქვენ არ. 741 00:43:45,420 --> 00:43:45,840 თქვენ გამორთულია მთელი ფილმი. 742 00:43:45,840 --> 00:43:46,930 >> -I უნდა დაპრესილი არასწორი ღილაკს. 743 00:43:46,930 --> 00:43:48,265 >> -Well, დაუსვან მას უკან. 744 00:43:48,265 --> 00:43:49,110 განათავსეთ ფილმის უკან. 745 00:43:49,110 --> 00:43:49,510 >> დიახ, სერ. 746 00:43:49,510 --> 00:43:49,917 დიახ, სერ. 747 00:43:49,917 --> 00:43:50,324 >> მოდით წავიდეთ, არნოლდ. 748 00:43:50,324 --> 00:43:51,140 მოდით, Gretchen. 749 00:43:51,140 --> 00:43:53,060 რა თქმა უნდა, თქვენ იცით, მე მაინც უნდა ანგარიშსწორება თქვენ ამ. 750 00:43:53,060 --> 00:43:53,440 >> [END ვიდეო აღწარმოების] 751 00:43:53,440 --> 00:43:54,690 >> ROB ბოდენი ყველა უფლება. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 ახლა რომ ჩვენ უკვე საუბარი უსაფრთხოების გარკვეულწილად, ლამაზი 754 00:44:08,430 --> 00:44:16,050 პატარა ფილმი ვებ, ასე რომ უკანასკნელ დღის განმავლობაში, ამ თემებზე NSA 755 00:44:16,050 --> 00:44:17,300 მონიტორინგის ყველაფერი. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 ეს შეიძლება იყოს რთული გრძნობენ, როგორც თქვენ აქვს გარკვეული კონფიდენციალურობის 758 00:44:26,930 --> 00:44:34,540 ამჟამად მსოფლიოში, თუმცა ვერ გეტყვით თქვენ ყველაზე დეტალებზე PRISM. 759 00:44:34,540 --> 00:44:42,130 ასე რომ, მოძრავი მიღმა PRISM, ჩვენ არ ვაპირებთ უნდა ლაპარაკი, რომ ახლა 760 00:44:42,130 --> 00:44:44,030 ვიფიქროთ თქვენი ლეპტოპი. 761 00:44:44,030 --> 00:44:48,360 ასე რომ, აქ, მე მინდა გადართოთ ჩემს რეალურ ანგარიშზე, 762 00:44:48,360 --> 00:44:50,370 ჩემი პატარა penguin. 763 00:44:50,370 --> 00:44:57,310 ასე რომ, მე მაქვს დაგავიწყდათ კომპლექტი, და რომ პაროლის რასაც მინდა, რომ იყოს. 764 00:44:57,310 --> 00:45:02,430 >> მაგრამ გახსოვდეთ, რომ ის, რაც მე ხე ერთად, ეს შესვლისას 765 00:45:02,430 --> 00:45:04,850 სწრაფი, ზოგიერთი პროგრამა. 766 00:45:04,850 --> 00:45:07,910 ეს რაღაც პროგრამა რომ იყო დაწერილი რამდენიმე პირი. 767 00:45:07,910 --> 00:45:13,250 და ასე, რომ პირი, თუ ისინი განსაკუთრებით მუქარის, მათ შეეძლოთ 768 00:45:13,250 --> 00:45:17,780 განაცხადა, ყველა უფლება, ასე რომ, თუ დაგავიწყდათ რომ მე შევა ტოლია ჩემი 769 00:45:17,780 --> 00:45:22,800 ფაქტობრივი დაგავიწყდათ, ან ტოლია ზოგიერთი სპეციალური პაროლი - 770 00:45:22,800 --> 00:45:25,550 დავით გასაოცარია ან რაღაც - 771 00:45:25,550 --> 00:45:27,190 მაშინ მათ შემოსული 772 00:45:27,190 --> 00:45:33,760 ასე რომ, მუქარის პროგრამისტი შეეძლო ხელმისაწვდომობა ყველა თქვენი Macs, ან 773 00:45:33,760 --> 00:45:36,150 Windows, ან არაფერი. 774 00:45:36,150 --> 00:45:41,980 >> ასე რომ არ არის ბევრი შეშფოთება, ვინაიდან, ვგულისხმობ, ეს არის login პროგრამა 775 00:45:41,980 --> 00:45:48,720 რომ გაიგზავნება OS X, ასობით ან ათასობით ადამიანს აქვს 776 00:45:48,720 --> 00:45:50,020 განხილული ამ კოდი. 777 00:45:50,020 --> 00:45:55,330 ასე რომ, თუ, თქვენს კოდი სადღაც, თქვენ ამბობენ, რომ თუ ამ სტრიქონს შეადგენს შეადგენს 778 00:45:55,330 --> 00:45:58,860 დავით გასაოცარია, login, მაშინ ვინმეს იქნება, ისევე, დაველოდოთ. 779 00:45:58,860 --> 00:45:59,800 ეს არ არის სწორი. 780 00:45:59,800 --> 00:46:01,790 ეს არ უნდა იყოს აქ. 781 00:46:01,790 --> 00:46:06,650 ასე რომ ერთი გზა მივიღებთ რამ იყოს სახის უსაფრთხო. 782 00:46:06,650 --> 00:46:10,300 >> მაგრამ ვიფიქროთ კი პროგრამები რომ წერთ. 783 00:46:10,300 --> 00:46:13,000 ვთქვათ თქვენ წერდა შესვლისას პროგრამა. 784 00:46:13,000 --> 00:46:20,440 ასე რომ, ეს შესვლისას პროგრამა, რომელიც თქვენ წერდა, ასე რომ, რა თქმა უნდა, თქვენ კარგი 785 00:46:20,440 --> 00:46:21,210 პროგრამისტი. 786 00:46:21,210 --> 00:46:25,610 თქვენ არ აპირებს დააყენოს ნებისმიერი მუქარის თუ x უდრის უდრის დავით awesome 787 00:46:25,610 --> 00:46:27,860 თქვენს კოდი. 788 00:46:27,860 --> 00:46:31,930 მაგრამ ეს პროგრამა, რას გამოყენება შეადგინონ ამ პროგრამის? 789 00:46:31,930 --> 00:46:34,180 რაღაც Clang. 790 00:46:34,180 --> 00:46:38,460 მერე რა, რომ პირი, რომელიც მოხდა დაწერა Clang სპეციალური cased in Clang 791 00:46:38,460 --> 00:46:44,310 რაღაც, თუ მე შედგენის შესვლა პროგრამას, შემდეგ შეიყვანეთ ეს კოდი 792 00:46:44,310 --> 00:46:49,720 შევიდა შესვლისას პროგრამა, რომელიც ამბობს, რომ თუ x უდრის უდრის დავით გასაოცარია? 793 00:46:49,720 --> 00:46:59,890 ასე რომ, არ არის საკმაოდ, მაგრამ ჩვენ იგივე საკითხი აქ, სადაც Clang, ასევე, 794 00:46:59,890 --> 00:47:03,790 ათასობით, თუ არ ათიათასობით ადამიანი, შევხედე Clang, აქვს 795 00:47:03,790 --> 00:47:07,160 შევხედე მისი ხაზების კოდი და განაცხადა, ყველა უფლება, იქ არაფერი ცუდი აქ. 796 00:47:07,160 --> 00:47:10,680 ცხადია, არავინ აკეთებს არაფერი ამ მუქარის. 797 00:47:10,680 --> 00:47:15,780 >> მაგრამ რა არის Clang თავად, ისევე, რა მოხდება, თუ მე კომპილაციის Clang? 798 00:47:15,780 --> 00:47:20,900 რა მოხდება, თუ მაქვს რამდენიმე შემდგენელი რომ ადგენს Clang რომ ჩანართები შევიდა Clang 799 00:47:20,900 --> 00:47:25,610 ამ სპეციალური hack, რომელიც ამბობს, ყველა უფლება, როდესაც მე კომპილაციის Clang, მაშინ 800 00:47:25,610 --> 00:47:31,290 შემსრულებელი მივიღებ უნდა სპეციალურად გამოიყურება შიგნით შესვლისას პროგრამა და ჩადეთ 801 00:47:31,290 --> 00:47:34,230 ამ პაროლი შეადგენს შეადგენს Dave არის რა? 802 00:47:34,230 --> 00:47:37,990 ასე რომ, გახსოვდეთ, რომ თქვენი შემდგენელი თავად უნდა იყოს შედგენილი რაღაც მომენტში. 803 00:47:37,990 --> 00:47:42,810 ასე რომ, თუ რა თქვენ კომპილაციის Clang ერთად, თავად არის მუქარის, მაშინ 804 00:47:42,810 --> 00:47:45,580 შეიძლება ბრალია მთელი გზა ქვევით ხაზი. 805 00:47:45,580 --> 00:47:49,630 >> ასე რომ აქ, ჩვენ Ken Thompson და Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 ასე რომ, ეს არის iconic სურათი. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie არის სწორი. 808 00:47:55,470 --> 00:47:58,740 იგი არის ძირითადი - 809 00:47:58,740 --> 00:48:03,640 საკმაოდ ბევრი წერდა C. ასე რომ თქვენ შეგიძლიათ დიდი მადლობა გადავუხადო მას ამ კლასში. 810 00:48:03,640 --> 00:48:04,840 კენ Thomson არის მარცხენა. 811 00:48:04,840 --> 00:48:07,780 ორი მათგანი ძირითადად დაწერა UNIX. 812 00:48:07,780 --> 00:48:10,140 ასევე, ისინი ძირითადი ავტორები in UNIX. 813 00:48:10,140 --> 00:48:11,310 იყო გარკვეული სხვები. 814 00:48:11,310 --> 00:48:16,240 ასე რომ, კენ ტომპსონი, რაღაც მომენტში, ის გაიმარჯვებს Turing ჯილდო. 815 00:48:16,240 --> 00:48:20,860 და Turing ჯილდო, მე ყოველთვის ისმის ეს მითითებული ამ გზით, ის 816 00:48:20,860 --> 00:48:23,100 ნობელის პრემიის კომპიუტერულ მეცნიერებათა. 817 00:48:23,100 --> 00:48:27,500 >> ასე რომ Turing ჯილდო, მას აქვს თავის გამოსვლაში მიღების. 818 00:48:27,500 --> 00:48:31,790 და იგი აძლევს ამ ძალიან ცნობილი გამოსვლა ახლა, ე.წ. მოსაზრებები ვაღიარებთ 819 00:48:31,790 --> 00:48:35,620 Trust, რომელიც ჩვენ არ უკავშირდება იმისათვის, რომ, რა თქმა უნდა ნახვა. 820 00:48:35,620 --> 00:48:41,670 და ამ სიტყვის, მისი თქმით, ყველა უფლება, ასე დავწერე UNIX და ახლა ყველა 821 00:48:41,670 --> 00:48:43,320 თქვენ ადამიანი იყენებს UNIX. 822 00:48:43,320 --> 00:48:46,960 ახლა, მახსოვს, რომ Linux არის პირდაპირი შთამომავალი UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X პირდაპირ იყენებს UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows არ იმდენად, მაგრამ ბევრი იდეები ამოღებულ იქნა UNIX. 825 00:48:53,810 --> 00:48:59,220 >> ამიტომ იგი მიდის სცენაზე და აცხადებს, ყველა უფლება, მე დავწერე UNIX. 826 00:48:59,220 --> 00:49:03,940 და მხოლოდ ასე რომ თქვენ ბიჭები ვიცი, მე ვარ შეუძლია შეხვიდეთ ყველა 827 00:49:03,940 --> 00:49:05,590 ერთი თქვენი კომპიუტერი. 828 00:49:05,590 --> 00:49:14,280 მას შემდეგ, რაც მე ზუსტად ერთი ასეთი განსაკუთრებული, თუ x უდრის უდრის Ken Thomson გასაოცარია, 829 00:49:14,280 --> 00:49:16,350 მაშინ მე დაშვებული შესვლაზე. 830 00:49:16,350 --> 00:49:18,370 ასე რომ, ადამიანებს, ისევე როგორც, ასევე, how'd თქვენ ამის გაკეთება? 831 00:49:18,370 --> 00:49:21,090 ჩვენ შევხედე შესვლისას პროგრამა და არაფერი არ არსებობს. 832 00:49:21,090 --> 00:49:24,700 ის მოსწონს, ასევე, მე განახლდა შემდგენელი შედით სისტემაში შესვლისას პროგრამა 833 00:49:24,700 --> 00:49:30,490 ისე, რომ შესვლისას პროგრამა არის ექნება რომ x ტოლია ტოლია Ken Thompson 834 00:49:30,490 --> 00:49:31,700 გასაოცარია. 835 00:49:31,700 --> 00:49:33,120 >> და ამბობენ, ისე, რომ არ არის მართალი. 836 00:49:33,120 --> 00:49:35,740 ჩვენ შევხედავთ შემდგენელი და შემდგენელი არ აქვს არც ერთი ხაზი 837 00:49:35,740 --> 00:49:36,400 კოდი იგრძნობა. 838 00:49:36,400 --> 00:49:40,540 ის მოსწონს, OK, მაგრამ რა ხარ შედგენის შემდგენელი ერთად? 839 00:49:40,540 --> 00:49:44,810 და ჰგონიათ, და ის, როგორც, ასევე, მე ვარ, ვინც მისცა თქვენ შემდგენელი 840 00:49:44,810 --> 00:49:50,580 თქვენ იყენებთ კომპილაციის შემდგენელი, ასე რომ, თქვენ შედგენის შემდგენელი, რომელიც 841 00:49:50,580 --> 00:49:56,390 თავისთავად მუქარის, და იქნება შესვენება შესვლისას პროგრამა. 842 00:49:56,390 --> 00:49:59,360 ასე რომ, ძირითადად, იმ ეტაპზე, არ არსებობს არანაირად თქვენ შეიძლება შევხედოთ წყარო 843 00:49:59,360 --> 00:50:02,450 კოდი შესვლისას პროგრამა რა არის არასწორი. 844 00:50:02,450 --> 00:50:04,220 თქვენ ვერ გამოიყურება კოდის შემდგენელი 845 00:50:04,220 --> 00:50:06,790 რა არის არასწორი. 846 00:50:06,790 --> 00:50:11,940 >> თქვენ უნდა შევხედოთ მანქანა კოდი, ფაქტობრივი ორობითი შესახებ 847 00:50:11,940 --> 00:50:16,760 შედგენილი შემდგენელი ვხედავ, დაველოდოთ, ამ ხაზების კოდი არ უნდა იყოს აქ. 848 00:50:16,760 --> 00:50:22,130 მაგრამ Ken Thompson მას ერთი ნაბიჯით შემდგომი და ვთქვი, რომ არსებობს 849 00:50:22,130 --> 00:50:25,980 ამ სპეციალური პროგრამა, რომელიც რეალურად დაეხმაროს წაიკითხოთ ორობითი პროგრამების, 850 00:50:25,980 --> 00:50:29,340 და ასე თუ ვინმე გამოყენებული, რომ პროგრამა წაკითხვის ორობითი, ისინი ვხედავთ ამ 851 00:50:29,340 --> 00:50:30,490 ხაზი კოდი. 852 00:50:30,490 --> 00:50:34,020 მან შეიცვალა იმ პროგრამების ვთქვა, ყველა უფლება, თუ თქვენ ეძებს 853 00:50:34,020 --> 00:50:38,460 შემდგენელი, არ ჩანს ამ კონკრეტულ კომპლექტი ორობითი. 854 00:50:38,460 --> 00:50:42,830 >> ასე რომ თქვენ უნდა მიიღოს, რომ ნაბიჯი შემდგომი და ძირითადად, რომ შეიძლება 855 00:50:42,830 --> 00:50:46,210 მიღებული სხვადასხვა დონეზე indirection, და რაღაც მომენტში, არავინ რეალურად 856 00:50:46,210 --> 00:50:47,990 იქნება შემოწმების. 857 00:50:47,990 --> 00:50:52,590 ასე რომ, მორალური ამბავი, თქვენ არ იქნება წერა 858 00:50:52,590 --> 00:50:54,340 Clang ამ კლასში. 859 00:50:54,340 --> 00:50:57,020 თქვენ უნდა გამოყენებით ასვლა Clang ბევრი ამ კლასში. 860 00:50:57,020 --> 00:51:00,490 ყველა იცით, Clang არის მუქარის პროგრამა, რომელიც საბოტაჟს ყველა 861 00:51:00,490 --> 00:51:03,520 ერთი პროგრამის თქვენ ოდესმე შედგენილი. 862 00:51:03,520 --> 00:51:08,206 და დატოვება თქვენ, რომ ძალიან საშიში გაითვალისწინოთ, რომ თქვენ ოთხშაბათს. 863 00:51:08,206 --> 00:51:10,030 >> [ტაში] 864 00:51:10,030 --> 00:51:12,935 >> დინამიკები 2: მომდევნო CS50. 865 00:51:12,935 --> 00:51:14,580 >> დინამიკები 3: ხომ არ გაბედავს ვთქვა, რომ. 866 00:51:14,580 --> 00:51:15,930 თქვენ შეგიძლიათ ამის გაკეთება. 867 00:51:15,930 --> 00:51:19,440 თქვენ კეთდება ეს ადრე, თქვენ შეგიძლიათ ამის გაკეთება დღეს, თქვენ შეგიძლიათ ამის გაკეთება ხვალ. 868 00:51:19,440 --> 00:51:20,930 თქვენ უკვე აკეთებს ამ წლების განმავლობაში. 869 00:51:20,930 --> 00:51:22,790 უბრალოდ იქ და ამის გაკეთება. 870 00:51:22,790 --> 00:51:24,310 თქვენ შეგიძლიათ ამის გაკეთება. 871 00:51:24,310 --> 00:51:26,102 >> [მუსიკის დაკვრა]