Xin chào, và chào mừng trở lại.
Trong bài giảng này, tôi muốn để nói về những gì
liên quan đến việc tạo một chương trình c.
Vì vậy, có bốn nhiệm vụ cơ bản trong việc tạo bất kỳ chương trình c nào.
Và những nhiệm vụ này là gì bao gồm chỉnh sửa, biên dịch, liên kết
và thực thi.
Chúng tôi đã nói về các bước khác nhau mà bạn sẽ sử dụng khi
bạn viết một chương trình c về mặt bạn sẽ để hiểu các yêu cầu, bạn sẽ thiết kế mã
của mình, bạn sẽ viết mã của bạn, sau đó bạn sẽ kiểm tra
và gỡ lỗi nó vân vân và sau đó duy trì nó.
Những gì tôi đang nói ở đây là những gì bạn thực sự cần làm khi
bắt đầu viết một chương trình. Chúng tôi đã nói chuyện về chỉnh sửa, biên dịch nhưng
liên kết và thực thi cũng rất quan trọng.
Và điều tôi muốn nói về đây là chi tiết của điều này.
Vì vậy, những nhiệm vụ này sẽ trở thành bản chất thứ hai đối với bạn bởi
vì bạn sẽ làm điều đó mỗi khi bạn viết một chương trình c.
Bạn sẽ chỉnh sửa mã nguồn, bạn sẽ
biên dịch, bạn sẽ liên kết, và sau đó bạn sẽ chạy.
Bạn sẽ làm điều này rất, rất thường xuyên.
Vì vậy, quá trình chỉnh sửa, biên dịch, liên kết và thực thi đều giống
nhau để phát triển chương trình trong mọi môi trường với bất kỳ ngôn
ngữ biên dịch nào.
Điều này không phải là duy nhất đối với c.
Nếu bạn đang viết java - một java chương trình, bạn sẽ viết
mã nguồn, bạn sẽ để biên dịch mã nguồn.
Liên kết - bạn có thể không biết trong java nhưng nó sẽ thực hiện một số loại
liên kết và chúng ta sẽ nói chuyện về liên kết là gì, và sau đó
bạn sẽ chạy chương trình.
Bạn sẽ làm tất cả những điều này.
Những gì tôi đang mô tả ở đây một lần nữa là cách nó được thực hiện trong c.
Vì vậy, chỉnh sửa chính xác là những gì bạn sẽ nghĩ rằng nó là.
Đó là quá trình tạo ra và sửa
đổi mã thực, mã nguồn c.
Mã nguồn c sẽ ở bên trong tệp.
Và nó sẽ chứa tất cả các tuyên bố và tất cả
các hướng dẫn mà bạn viết.
Tất cả các tệp mã nguồn c đều kết thúc với. phần mở rộng c và đó là cách bạn
có thể xác định rằng đó là một tệp mã nguồn.
Trước đó . phần mở rộng c đang diễn ra được gọi
là tên cơ sở, bạn muốn tên tệp của mình có ý nghĩa.
Nếu bạn viết một chương trình c có thêm hai số, bạn có thể có một tệp
được gọi là thêm. c, chứa mã nguồn.
Và hãy nhớ rằng hầu hết c chương trình sẽ có nhiều
tệp khác nhau.
Vì vậy, các tệp của bạn nên có tên tốt.
Nhưng cách mà bạn có thể xác định c mã nguồn là. c mở rộng.
Tất cả chúng đều chứa. c mở rộng.
Bây giờ khi chúng tôi chỉnh sửa mã của mình cho lớp này, chúng ta sẽ sử dụng một
môi trường phát triển tích hợp.
Chúng tôi không chỉ đi để sử dụng một trình soạn thảo đơn giản.
Một ví dụ về một trình soạn thảo đơn giản sẽ là một cái gì đó giống như wordpad.
Chúng tôi sẽ sử dụng một cái gì đó có một trình chỉnh
sửa nhưng cũng có nhiều thứ khác giúp bạn viết mã của bạn hiệu quả hơn.
IDE - và đây được gọi là IDE, môi trường phát triển tích hợp.
Cái mà chúng tôi sẽ sử dụng cho lớp này là
Khối mã, tôi sẽ trình bày chi tiết, nhưng chúng tôi sẽ sử dụng
các khối mã cho tác vụ chỉnh sửa.
Nhưng bạn có thể sử dụng bất cứ điều gì bạn muốn.
Nếu bạn muốn sử dụng notepad, nếu bạn muốn
sử dụng thứ gì đó thậm chí còn nhỏ hơn, bạn có thể Atom, có IDE studio trực
quan, nhưng cái mà chúng tôi sẽ đề cập ở đây là cách để chỉnh sửa mã và khối mã của bạn.
Và đây là một lý tưởng tốt đẹp và lý do tôi chọn nó, chúng ta sẽ
nói về chi tiết hơn, nhưng nó là đa nền tảng và dễ sử dụng.
Vì vậy, chỉnh sửa là cơ bản xử lý, viết mã.
Biên dịch.
Chúng tôi biết những gì một trình biên dịch làm.
Nó chỉ cần mức độ cao đó mã ngôn ngữ và chuyển đổi nó
sang ngôn ngữ máy, và nó cũng phát hiện và tìm lỗi trong mã của bạn.
Sau khi bạn chỉnh sửa mã của mình, bạn sẽ chạy trình biên dịch.
Vì vậy, đầu vào cho trình biên dịch là sẽ là tất cả mã
nguồn của bạn, tất cả của bạn. tập tin c mọi thứ mà bạn đang chỉnh sửa.
Và một lần nữa, một chương trình c có thể có nhiều tệp nguồn.
Nhưng đầu vào cho trình biên dịch là các tệp nguồn này, quá trình biên
dịch tự chuyển đổi mã này là một quá trình gồm hai giai đoạn.
Giai đoạn đầu tiên được gọi là giai đoạn tiền xử lý.
Trong thời gian đó mã của bạn có thể được sửa đổi hoặc thêm vào.
Và giai đoạn thứ hai là biên dịch thực tế, nó tạo ra
mã hợp ngữ.
Và chúng ta sẽ nói về điều này trong nhiều hơn chi tiết, giai đoạn tiền xử lý này.
Nhưng bạn chỉ cần biết bây giờ có hai giai đoạn
khi bạn biên dịch.
Cái mà chúng tôi sẽ tập trung vào hay dễ hiểu là
cách tạo mã đối tượng.
Vì vậy, trình biên dịch sẽ xem xét từng
tuyên bố và sẽ đảm bảo rằng cú pháp đúng và ngữ nghĩa của
ngôn ngữ được đáp ứng.
Cú pháp là để đảm bảo rằng cấu trúc của mã là đúng, rằng bạn có
dấu chấm phẩy ở cuối tuyên bố, rằng bạn
đang sử dụng các kiểu dữ liệu, rằng bạn - bạn tuân theo các quy tắc của ngôn ngữ.
Ngữ nghĩa là ý nghĩa của các từ.
Vì vậy, nếu bạn sử dụng if từ khóa, đó là một điều kiện.
Ngữ nghĩa xảy ra trong giai đoạn biên dịch bằng cách tạo
một bảng ký hiệu, v.v.
Nhưng trình biên dịch là quan trọng.
Nó sẽ tạo ra mã đối tượng này.
Nó sẽ cho bạn biết nếu bạn có bất kỳ lỗi nào trong cú pháp của bạn.
Đôi khi nó cũng có thể nhận ra cho dù bạn có mã chết hay không
mà về cơ bản mã không được sử dụng.
Nó không tìm thấy lỗi logic.
Nó chỉ tìm lỗi cú pháp.
Một lần nữa, cú pháp là quy tắc và ngôn ngữ.
Lỗi logic là ý nghĩa.
Giống như nếu bạn mắc sai lầm về mặt logic, bạn có thể
mắc lỗi trong chức năng.
Vì vậy, mã của bạn có thể chạy, nó có thể biên dịch, nhưng nó có thể không hoạt động như dự định và
đây được coi là một lỗi logic.
Trình biên dịch sẽ không nói bạn nếu bạn có một lỗi logic.
Nếu bạn định yêu cầu người dùng số thay vì một chuỗi ký tự hoặc bạn hỏi người dùng
về tên trước tên của họ, đó là
một lỗi logic. Trình biên dịch không hoạt động để cho bạn biết những loại lỗi.
Các lỗi điển hình được báo cáo bởi trình biên
dịch sẽ là những thứ như biến không khai báo, biểu thức
điều đó không phù hợp với cú pháp, bạn không có quyền dấu ngoặc đơn, bạn biết
các khối không có khối kết thúc.
Bạn sẽ trở nên rất, rất quen thuộc với các lỗi trình biên
dịch và ý nghĩa của chúng.
Hy vọng rằng sau khi bạn đã học được ngôn ngữ c và bạn chạy trình
biên dịch, bạn sẽ thấy một lỗi và bạn
sẽ có thể sửa nó ngay lập tức.
Nói rất tiếc đã quên cú pháp hoặc Rất tiếc, tôi đã quên
dấu chấm phẩy, ồ, tôi quên cung cấp quyền dấu ngoặc để kết thúc khối mã đó.
Nó sẽ trở thành bản chất thứ hai.
Vì vậy, sau khi bạn sửa chữa tất cả lỗi và
quá trình biên dịch của bạn thành công, nó sẽ dịch sang hợp ngữ và
tạo mã đối tượng này.
Vì vậy, đối tượng thực tế mã là a. o tập tin.
Đó là bản tóm tắt thực tế mã ngôn ngữ được chạy.
Nó có một phần mở rộng. obj hoặc. o. obj thường trên windows sẽ là phần mở rộng. o trên Linux hoặc Macintosh hệ thống sẽ là phần mở rộng.
Bạn sẽ thấy tệp đó được tạo ra sau khi bạn biên dịch mã của mình.
Và đó chỉ là giai đoạn kết thúc
của biên dịch, đó là hợp ngữ thực tế.
Nó sẽ là nhị phân, nó không giống như văn bản mà bạn
sẽ không thể nhìn vào nó.
Nó chỉ sẽ có một . o phần mở rộng, và đó là những gì trình
biên dịch tạo ra.
Cách bạn chạy trình biên dịch trong c là bạn thực sự sử dụng một lệnh.
Bạn có thể không cần
phải làm điều này nhiều vì lý tưởng, trình soạn thảo trong sự phát triển tích hợp là sẽ làm điều đó cho bạn chỉ bằng
cách nhấp vào một tùy chọn menu, nhưng nó quan trọng để biết những gì đang xảy ra.
Vì vậy, khi bạn phát hành trình biên
dịch , nó thường sử dụng trình biên dịch GNU là lệnh gcc.
Nhưng ở cấp độ cơ bản, bạn chỉ cần chạy một chương trình biên dịch cc hoặc gcc.
Bạn chạy chương trình đó và sau đó bạn chỉ định đầu vào.
Hãy nhớ rằng, trình biên dịch có như đầu vào các tệp nguồn.
Bạn chỉ định đầu vào bằng cách sử dụng -c gắn cờ và
sau đó chỉ định các tệp nguồn, lần lượt.
Vì vậy, ví dụ ở đây là cc-cmyprog. c hoặc nếu bạn đang sử dụng trình biên dịch GNU, một trình
biên dịch gcc-c phổ biến.
Và nếu bạn bỏ qua c, cờ của bạn chương trình sẽ tự động được
liên kết cũng là bước tiếp theo.
Nhưng thực sự rất dễ dàng để chạy điều đó trình biên dịch nếu bạn đang ở
giao diện dòng lệnh.
Nó thậm chí còn dễ dàng hơn nếu bạn chỉ sử dụng một tùy chọn menu mà chúng ta có thể
sẽ thực hiện trong lớp này.
Nhưng một lần nữa, nó cần đầu vào, các tệp nguồn c.
Trong các khối mã, như tôi đã đề
cập, bạn sẽ chỉ cần nhấp vào một tùy chọn menu và nó sẽ tự động biên dịch
một liên kết và sau đó bạn có thể nhấp vào một menu khác tùy chọn nó sẽ tự động chạy.
Nhưng một lần nữa, những gì đang xảy ra dưới mui xe là bạn đang thực sự phát
hành lệnh trình biên dịch với -c cờ và các tệp nguồn đầu vào.
Sau khi bạn biên dịch, bạn liên kết. Giống như tôi đã nói mọi ngôn ngữ lập trình đều có một
liên kết, nhưng rất nhiều đôi khi nó minh bạch, bạn thậm chí sẽ không biết
điều gì đang xảy ra.
Trong c, quá trình liên kết là quan trọng bởi vì nó không phải lúc nào cũng minh bạch.
Nhưng với hầu hết các IDE
hiện đại ngày nay, đúng là như vậy, nhưng tôi phải nhấn mạnh rằng nó quan trọng trong c.
Vì vậy, sau khi chương trình có đã được dịch sang điều này. mã cũ mã đối tượng của nó, nó sau đó đã
sẵn sàng để được liên kết.
Lý do chúng tôi liên kết là nếu chúng tôi sử
dụng các thư viện bên ngoài, chúng tôi phải lấy tất cả các thư viện khác và đưa chúng vào một chương trình.
Vì vậy, liên kết chỉ là nhận được tất cả các phụ thuộc tại chỗ
và xây dựng một tệp thực thi thực sự.
Nên . o tệp là các đối tượng.
Sau đó, bạn liên kết tất cả . os thành một tệp thực thi.
Và một lần nữa, điều này thường
là trong suốt, thường xảy ra tự động khi bạn biên dịch.
Nhưng một lần nữa, nó có thể không và bạn có thể phải thực hiện một lệnh riêng
biệt, chẳng hạn như -l hoặc một cái gì đó.
Nhưng nó lấy tất cả những đối tượng đó các tệp và bản dựng có thể thực thi.
Và tệp thực thi là những gì bạn chạy.
Vì vậy, nó sẽ kết hợp tất cả những thứ đó.
Và sau đó nó cũng sẽ kết hợp.
Và bạn có thể có. đó là thư viện bổ sung, các chương trình khác mà bạn có thể
muốn sử dụng ai đó đã viết
hoặc các thư viện khác đi kèm với ngôn ngữ c.
Bạn sẽ lấy tất cả những cái đó và đặt chúng lại với nhau.
Và giai đoạn liên kết sẽ cũng phát hiện và báo cáo lỗi.
Chúng là hai giai đoạn riêng biệt.
Liên kết, một lần nữa, thường sẽ giống như lỗi định nghĩa lại hoặc bạn đang cố
gọi một hàm không tồn tại.
Vì vậy, nếu bạn không có điều đó. o nộp cho tạo nên toàn bộ chương trình, bạn
sẽ gặp lỗi liên kết.
Và bạn sẽ cần phải có tất cả. của o.
Và một lần nữa, các. của o thậm chí có thể không phải của bạn.
Chúng có thể đến với cùng một ngôn ngữ, chúng có thể là một phần của thư viện tiêu chuẩn hoặc chúng
có thể đi kèm với một chương trình mà người khác đã viết.
Nhưng bạn cần tất cả những thứ đó. của o để tạo thành một tệp thực thi.
Vì vậy, các thư viện chương trình hỗ trợ và mở rộng ngôn ngữ C bằng cách cung cấp các quy trình để thực hiện các hoạt
động đó không phải là một phần của ngôn ngữ.
Thư viện đầu vào và đầu ra là ví dụ, thư
viện toán học, các thư viện thao tác chuỗi.
Đây chỉ là điều tương tự nếu bạn quen thuộc với chương trình
java, nó giống như java api.
Nó cũng giống như các gói.
Đó là khái niệm tôi
muốn ghi dữ liệu vào tệp mà tôi không muốn tự
triển khai, tôi sẽ sử dụng một thư viện hiện có đi kèm với ngôn ngữ.
Nó vẫn được viết bằng c, nó chỉ ai đó c đến với điều đó.
Vì vậy, có tất
cả các loại các thư viện khác nhau mà chúng ta sẽ tìm hiểu và sử dụng.
Điều này xảy ra một phần của giai đoạn liên kết.
Vì vậy, một sự thất bại trong giai đoạn
liên kết có nghĩa là một lần nữa bạn phải
quay lại và chỉnh sửa mã nguồn của mình để tạo chắc chắn rằng bạn có thể
tìm thấy tệp đối tượng đó, vì vậy rất nhiều lỗi thường xảy ra nghĩa là bạn chỉ cần bao gồm một tệp hoặc một cái gì đó tương tự. Đây cũng sẽ trở thành bản chất thứ hai.
Thành công, nếu bạn đã hoàn thành biên dịch thành công, bạn đã hoàn tất liên kết
thành công, sẽ tạo ra một tệp thực thi.
Trong môi trường cửa sổ, tệp
thực thi sẽ có một. phần mở rộng exe.
Trong Linux và Windows, nó sẽ chỉ có theo mặc định a. ngoài.
Bạn có thể thay đổi tên của a. ngoài sang một cái gì đó có
ý nghĩa hơn bằng cách chỉ phát hành một cái gì đó cùng bằng lệnh trình biên dịch.
Nhưng hầu hết các IDE trong các
khối mã cũng sẽ có một chương trình biên dịch và liên kết
trong một thao tác duy nhất và nó sẽ tạo tệp thực thi và sau đó bạn có thể chỉ cần nhấp đúp vào tệp thực
thi hoặc bạn có thể chạy tệp thực thi từ một lệnh hoặc từ tùy chọn menu.
Nhưng không ở mức thấp nếu bạn trên Linux,
bạn sẽ thấy một. theo mặc định dưới dạng tệp thực thi của bạn. Trên cửa sổ, bạn sẽ thấy một. exe.
Một chương trình có quy mô đáng kể sẽ bao gồm một số tệp mã nguồn, tôi đã
đề cập điều này trước đó.
Mỗi tệp mã nguồn cần trình biên dịch để tạo
tệp đối tượng cần được liên kết.
Chương trình dễ dàng hơn nhiều quản lý bằng cách chia nó
thành một số tệp nguồn nhỏ hơn.
Bạn sẽ muốn sử dụng nhiều nguồn và bạn không muốn một
tệp nguồn chứa 5000 dòng mã.
Đó không phải là sự gắn kết.
Điều đó không dễ quản lý.
Vì vậy, bạn sẽ tạo tệp
chứa mã nguồn và mã nguồn sẽ cụ thể.
Nó sẽ có một chức năng cụ thể.
Nó làm cho nó dễ dàng hơn nhiều
phát triển và dễ gỡ lỗi hơn nhiều và gắn kết hơn nhiều.
Vì vậy, bạn sẽ có nhiều tệp nguồn nhỏ hơn.
Bạn không muốn các tệp nguồn lớn với hàng nghìn dòng mã.
Và tất cả các tệp nguồn này là sẽ tạo nên toàn bộ chương trình.
Tất cả họ sẽ có riêng . o's, và tất cả chúng
sẽ được nhập vào trình biên dịch.
Tất cả những khái niệm này làm cho lên chương
trình, về cơ bản cũng được coi là một dự án.
Bạn có thể nghĩ về nó như là ở cấp độ cao hơn.
Đó là dự án của bạn, đó là chương trình của bạn.
Sau khi bạn đã hoàn thành tất cả cái này và bạn đã liên kết nó, bạn đã có
tệp thực thi của mình, sau đó bạn có thể chạy chương trình.
Trong hầu hết các IDE, đây chỉ là sẽ là một lần nhấp
vào menu hoặc bạn có thể nhấp đúp vào cửa sổ, bạn có thể nhấp đúp vào exe.
Và nếu bạn đang sử dụng Linux, bạn chỉ cần nhập vào một. ngoài.
Bây giờ khi a. ra ngoài bạn phải có một số quyền nhất định, vì vậy bạn có thể phải đưa ra lệnh
thay đổi chế độ, nhưng để chạy nó, bạn có thể nói. /một. ra ngoài và điều đó sẽ chạy
chương trình từ dòng lệnh Linux.
Nhưng một lần nữa, bạn không cần phải lo lắng về điều này. Vì vậy, giai đoạn thực
thi là nơi bạn chạy chương trình của mình.
Mỗi câu lệnh của chương trình được thực hiện tuần tự lần lượt.
Nếu chương trình yêu cầu bất kỳ
dữ liệu từ người dùng, chương trình sẽ tạm dừng và nhận đầu vào đó.
Bạn có thể lấy đầu vào thông qua bàn phím hoặc nó có thể nhận đầu vào thông qua giao diện người dùng đồ
họa nếu bạn có thư viện cho điều đó trong mã c của bạn.
Kết quả được hiển thị bởi chương trình xuất hiện trong
một cửa sổ được gọi là bàn điều khiển.
Và chúng tôi sẽ hiển thị cho bạn ví dụ về điều này khi chúng
ta nói về các khối mã.
Nhưng khi bạn chạy chương trình của mình, thông thường, bạn sẽ thấy đầu ra.
Không phải lúc nào cũng vậy, đôi khi các chương trình sẽ làm những việc không tạo ra đầu ra.
Nhưng thông thường, họ sản xuất đầu ra
và bạn thấy đầu ra ngay trên thiết bị đầu cuối hoặc bảng điều khiển.
Giai đoạn thực thi cũng tạo ra một loạt các điều kiện lỗi.
Vì vậy, bạn có thể sản xuất
sai đầu ra chỉ là một lỗi logic và bạn phải quay lại và chỉnh sửa mã nguồn của bạn.
Nó có thể ngồi đó và không làm gì cả bởi vì bạn có vấn đề logic.
Và cuối cùng nó có thể
sụp đổ máy tính của bạn là trường hợp xấu nhất, có nghĩa là bạn đã làm điều gì
đó thực sự tồi tệ trong chương trình của mình
và nó quá tệ rằng chương trình vừa chết hoặc chỉ hoặc nó thực
sự gây ra chương trình trên hệ điều hành của bạn để làm hỏng toàn bộ máy tính của bạn.
Vì vậy, chạy ứng dụng c thực tế có thể gây ra vấn đề. Nếu chương trình không thực hiện chức năng dự định, sau đó bạn phải quay lại
và chỉnh sửa nguồn mã bạn
có thể phải tổ chức lại hoặc thiết kế lại và đây là
lúc chúng tôi đã nói về các bước khác nhau.
Điều này được gọi là gỡ lỗi giai đoạn tìm và sửa lỗi của bạn.
Chúng ta sẽ có toàn bộ
phần gỡ lỗi vì nó rất quan trọng.
Tôi đã đề cập trước đó rằng một cách tốt nhất để học là
học qua các lỗi của bạn.
Bạn sẽ liên tục quay lại và chỉnh sửa mã nguồn và gỡ lỗi.
Toàn bộ quá trình biên dịch, liên
kết và thực thi chương trình được lặp lại cho đến khi bạn hoàn thành,
cho đến khi bạn có tất cả các kết quả mà bạn cần cho chức năng của mã đó.
Vì vậy, đây, một lần nữa, một tốt đẹp khác minh họa tôi muốn cung cấp.
Cái này được lấy từ một cuốn sách được gọi là Beginning C bởi Horton.
Nhưng đây là quá trình mà bạn sẽ có.
Bạn sẽ chỉnh sửa mã nguồn của mình.
Bạn sẽ tạo một tệp với . phần mở rộng c và một tên có nghĩa.
Bạn sẽ sử dụng một trình chỉnh sửa để làm điều đó
hoặc IDE, môi trường phát triển tích hợp, một cái gì đó giống như Khối mã.
Sau đó bạn sẽ biên dịch nó.
Trình biên dịch sẽ tạo một tệp obj một tệp o.
Nếu nó không tạo ra
tệp đó, điều đó có nghĩa là bạn có lỗi và bạn phải quay lại và sửa chúng.
Sau khi bạn tạo các tệp obj, các tệp đối tượng, sau đó bạn phải liên kết tất cả
chúng lại với nhau để tạo một tệp thực thi.
Và bạn cũng có thể có lỗi trong giai đoạn
đó mà chúng không được liên kết đúng cách.
Bạn phải quay lại và chỉnh sửa mã nguồn của bạn.
Một khi bạn thực sự không có lỗi và bạn
có một tệp thực thi, sau đó bạn có thể chạy chương trình của mình.
Và một lần nữa, sau khi bạn chạy chương trình, bạn vẫn có thể có lỗi vì
có thể có lỗi logic.
Vì vậy, sau đó bạn sẽ quay trở lại và chỉnh sửa mã nguồn của bạn.
Vì vậy, điều này sẽ trở thành một
quy trình lặp đi lặp lại mà bạn sẽ rất quen thuộc.
Chỉnh sửa, biên dịch, liên kết, thực thi.
Và điều này một lần nữa thường là những gì bạn làm trong tất cả các ngôn ngữ.
Bạn sẽ làm điều này hơn và lặp đi lặp lại cho đến khi chương trình
của bạn đáp ứng tất cả các yêu cầu của bạn.