2013-09-21 51 views
10

Tôi là người mới bắt đầu bằng ngôn ngữ C. Bất cứ ai có thể giải thích chi tiết bằng cách sử dụng ví dụ như thế nào main(), int main(), void chính(), chính (void), void chính (void), int chính (void) làm việc trong ngôn ngữ C? Như trong những gì là happeneing khi chúng tôi sử dụng void chính() và những gì đang xảy ra khi tôi sử dụng int main() trong ngôn ngữ đơn giản và như vậy.
Tôi biết nhưng không thể hiểu những gì là nó thực hiện:int main() và void main() hoạt động như thế nào

  1. main() - chức năng không có đối số
  2. int main() - hàm trả về giá trị int
  3. void main() - hàm trả về không có gì vv

khi tôi viết đơn giản hello world bằng cách sử dụng int main() return 0 nó vẫn mang lại cho tôi đầu ra giống như khi sử dụng void main()) vậy nó hoạt động như thế nào? Ứng dụng của nó là gì?

+5

'void main()' hữu ích chủ yếu là dấu hiệu cho thấy bạn đang sử dụng sách giáo khoa được viết bởi người không biết ngôn ngữ C. Trong các biểu mẫu bạn đã liệt kê, chỉ 'int main (void)' là hợp lệ. (Nó không * khá * đơn giản, nhưng bây giờ đủ gần.) –

Trả lời

19

Không main() hoặc void main() là tiêu chuẩn C. Giá trị cũ được cho phép vì giá trị trả về ngụ ý là int tiềm ẩn, tương tự như int main(). Mục đích của giá trị trả lại của main là trả lại một exit status cho hệ điều hành.

Trong tiêu chuẩn C, có chữ ký hợp lệ chỉ cho main là:

int main(void) 

int main(int argc, char **argv) 

Mẫu mà bạn đang sử dụng: int main() là một tuyên bố phong cách cũ mà chỉ main mất một không xác định số lượng đối số. Không sử dụng nó - chọn một trong những điều trên.

+1

Trong sơ yếu lý lịch, chúng chỉ được phép tương thích ngược với mã C cũ được viết khi hệ điều hành không yêu cầu trạng thái thoát. Bạn luôn luôn phải trả về một giá trị số nguyên trong 'main' – Jack

+2

@Jack:' void main() 'không dành cho tương thích ngược với bất kỳ thứ gì. Cùng một tiêu chuẩn mà lần đầu tiên giới thiệu từ khóa 'void' xác định kiểu trả về của' main' là 'int'. –

+0

int chính (int argc, const char ** argv, const char ** env) – dns

0

int main lợi nhuận integer giá trị

khi

void main lợi nhuận nothing

8

Nếu bạn thực sự muốn hiểu ANSI C 89, tôi cần phải sửa bạn trong một điều; Trong ANSI C 89 sự khác biệt giữa các chức năng sau:

int main() 
int main(void) 
int main(int argc, char* argv[]) 

là:

int main()

  • một chức năng mà hy vọng số không rõ các đối số của các loại chưa biết. Trả về một số nguyên biểu thị trạng thái phần mềm ứng dụng.

int main(void)

  • một chức năng mà hy vọng không có đối số. Trả về một số nguyên biểu thị trạng thái phần mềm ứng dụng.

int main(int argc, char * argv[])

  • một chức năng mà hy vọng argc số đối số và argv [] đối số. Trả về một số nguyên biểu thị trạng thái phần mềm ứng dụng.

Về khi sử dụng từng chức năng

int main (void)

  • bạn cần phải sử dụng chức năng này khi chương trình của bạn không cần các thông số ban đầu để chạy/tải (các tham số nhận được từ hệ điều hành - ngoài chương trình tự nó).

int main (int argc, char * argv [])

  • bạn cần phải sử dụng chức năng này khi chương trình của bạn cần các thông số ban đầu để tải (thông số nhận được từ hệ điều hành - ra của chương trình nó tự).

Về void main()

Trong ANSI C 89, khi sử dụng void main và soạn thảo các dự án AS -ansi -pedantic (trong Ubuntu, ví dụ) bạn sẽ nhận được một cảnh báo chỉ ra rằng chức năng chính của bạn là kiểu void và không thuộc về gõ int, nhưng bạn sẽ có thể chạy dự án. Hầu hết các nhà phát triển C có xu hướng sử dụng int main() trên tất cả các biến thể của nó, mặc dù void main() cũng sẽ biên dịch.

Hy vọng điều đó sẽ hữu ích!

Chúc may mắn và mã hóa hạnh phúc