2012-02-04 32 views

Trả lời

5

Khi bạn yêu cầu hệ điều hành chạy một tệp, nó sẽ tải nó vào bộ nhớ và nhảy đến điểm bắt đầu (_start, v.v.). Tại thời điểm này, có một mã, gọi main và sau đó thoát ra (Trình liên kết chịu trách nhiệm về phần này). Nếu bạn sẽ viết chương trình mà không có chức năng main, trình liên kết sẽ cung cấp cho bạn một lỗi, vì nó không thể tìm thấy nó.

0

Chương trình của bạn (là chuỗi mã được bao gồm bên trong các hàm) phải có điểm bắt đầu ngay?

Thứ gì đó phải được gọi trước để chạy phần còn lại.

Vì vậy, mà điểm khởi đầu là main, được gọi là bởi quá trình cha mẹ trong O/S (những gì bao giờ hết đó là) và cho phép chương trình của bạn chạy

+0

yah, tôi biết điều đó nhưng khi tôi viết '$./A.out' chương trình nào tôi thực sự đang chạy? – Vikram

+0

Bạn nĩa một quá trình gọi chính (đây là một tập tin ELF) – Cratylus

7

Chức năng main được gọi là, trong thực tế, do Thời gian chạy C.

Bạn có thể viết chương trình không có main nhưng nó phải có điểm vào. Các hệ điều hành khác nhau cho phép bạn chỉ định các điểm nhập khác nhau cho chương trình của bạn, nhưng tất cả chúng đều phục vụ cùng mục đích như main. Trên Windows, bạn có thể sử dụng WinMain. Trên Linux, bạn có thể liên kết mà không có CRT và xác định hàm _start của riêng bạn (nhưng không thể trả lại!)

Một chương trình không có điểm vào giống như ô tô không có bánh xe.

+0

Nó không phải là cách khác arround? Chương trình gọi và liên kết đến thời gian chạy C? – Cratylus

+0

Giống như một chiếc xe không có động cơ khởi động, chiếc xe ở đó, nó có thể làm mọi thứ được cho là, nhưng không có gì bắt đầu quá trình – whitelionV

+0

1) Bạn có ý nghĩa gì với thời gian chạy C? 2) Bạn có nghĩa là nếu tôi viết một chương trình C đang thực hiện trong hệ điều hành của tôi hoàn hảo .... Tôi không thể chạy nó trên hệ điều hành khác nhau bởi vì hệ điều hành khác nhau có điểm nhập khác nhau ??? – Vikram

0

Câu trả lời đơn giản nhất là: người dùng chương trình của bạn gọi chức năng chính khi họ khởi động ứng dụng của bạn. Bạn đã bao giờ sử dụng một thiết bị đầu cuối lệnh? Nếu bạn có, bạn sẽ biết rằng bạn có thể chuyển đối số cho một lệnh. Ví dụ:

$ grep word myfile 

gì đang xảy ra dưới lớp chăn là Terminal nhìn vào những gì bạn đã nhập sau đó gọi main phương pháp của chương trình grep và vượt qua [word, myfile] như là đối số thứ hai để phương pháp này. Đây là một sự đơn giản nhưng tôi hy vọng nó sẽ giúp.

Các vấn đề liên quan