2012-09-11 27 views
12

Tôi là một người dùng Linux người bắt đầu học C và tôi đang cố gắng để biên dịch mã nguồn này mà tôi gõ:cảnh báo: trở lại kiểu mặc định là 'int' [-Wreturn-type]

#include <stdio.h> 
main() 
{ 
     float c,d; 
     c = 10215.3; 
     d = c/3; 
     printf("%3.2f\n",d); 
     return 0; 
} 

Nó biên soạn với điều này bằng cách sử dụng makefile mà tôi đã viết:

cc -Wall -g  printf.c -o printf 

nhưng tôi nhận được cảnh báo này:

printf.c: 2: 1: cảnh báo: trở lại kiểu mặc định là 'int' [-Wreturn -kiểu ]

nó biên dịch mã và tôi nhận được kết quả mong muốn nhưng tôi muốn hiểu điều này có nghĩa

+0

Câu hỏi đầu tiên và được thực hiện tốt trên định dạng. Chào mừng bạn! – bohney

Trả lời

15
main() 

nên

int main() 

Trong C89, kiểu trả về mặc định được giả là int, đó là lý do tại sao nó hoạt động.

+0

@DanielFischer không biết điều đó. Đã sửa. Cảm ơn! –

+0

đã hoạt động, không còn cảnh báo nữa. và tôi hiểu sai lầm của tôi. cảm ơn! – JoshD

+0

Không sao cả. Bây giờ bạn có thể thêm rằng trình biên dịch sử dụng một phương ngữ của C89 theo mặc định, rõ ràng :) –

0

Trong C89, kiểu trả về mặc định là int. Mặc định này đã được gỡ bỏ trong C99 và trình biên dịch hữu ích nhắc bạn rằng kiểu C của bạn không có int trước chính() đã lỗi thời.

Xem Phần đặc điểm kỹ thuật C89 3.5.2 "Loại specifiers":

  • "Mỗi danh sách các loại specifiers sẽ là một trong những bộ sau đây: [...] + int, , đã ký int, hoặc không có loại thông số nào ".

  • Và trong đoạn thứ hai của ngữ nghĩa: "Mỗi bộ [...] chỉ định cùng một loại, ngoại trừ trường bit [blabla]". Vì vậy, điều này có nghĩa là "không có loại thông số" nào giống như int.

Trong C99, phần "hoặc không có bộ định loại loại" được loại bỏ. (Nhưng bạn vẫn có thể viết đã ký mà không cần int một phần.)

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