Thông thường trong C, chúng ta phải nói với máy tính loại dữ liệu trong khai báo biến. Ví dụ, trong chương trình sau, tôi muốn in tổng của hai số dấu phẩy động X và Y.
#include<stdio.h>
main()
{
float X=5.2;
float Y=5.1;
float Z;
Z=Y+X;
printf("%f",Z);
}
Tôi đã phải nói với trình biên dịch loại biến X.
- Trình biên dịch có thể tự xác định loại của
X
nó không?
Vâng, nó có thể nếu tôi làm điều này:
#define X 5.2
Bây giờ tôi có thể viết chương trình của mình mà không cần nói cho trình biên dịch loại X
như:
#include<stdio.h>
#define X 5.2
main()
{
float Y=5.1;
float Z;
Z=Y+X;
printf("%f",Z);
}
Vì vậy, chúng ta thấy rằng ngôn ngữ C có một số loại tính năng, sử dụng ngôn ngữ này có thể tự xác định loại dữ liệu. Trong trường hợp của tôi, nó đã xác định đó X
là loại float.
- Tại sao chúng ta phải đề cập đến loại dữ liệu, khi chúng ta khai báo một cái gì đó trong hàm main ()? Tại sao trình biên dịch không thể tự xác định kiểu dữ liệu của một biến
main()
như trong#define
.
#define X 5.2
, X
không phải là một biến, mà là một hằng số, vì vậy nó được thay thế theo nghĩa đen là tiền xử lý với 5.2
bất kỳ nơi nào bạn đề cập X
. Bạn không thể chỉ định lại X
.
auto
thực sự làm những gì bạn muốn). Mặt khác, nếu bạn nghĩ rằng bạn biết mã của mình đang làm gì và bạn thực sự đã gõ một cái gì đó khác, việc gõ tĩnh như thế này sẽ bắt lỗi sớm hơn, trước khi nó trở thành một vấn đề lớn. Mỗi ngôn ngữ tạo ra sự cân bằng: gõ tĩnh, gõ vô sinh, gõ động. Đối với một số tác vụ, việc gõ thêm thực sự đáng giá. Đối với những người khác, đó là một sự lãng phí.
5.2
là mộtdouble
, do đó, chương trình đầu tiên làm tròn hai chữ thànhfloat
độ chính xác, sau đó thêm chúng dưới dạng nổi, trong khi chương trình thứ hai làm tròn biểu diễn kép 5.1 trở lạidouble
và thêm vàodouble
giá trị 5.2 bằng cách sử dụng phépdouble
cộng, sau đó làm tròn kết quả của phép tính đó thànhfloat
độ chính xác . Bởi vì làm tròn xảy ra ở những nơi khác nhau, kết quả có thể khó khăn hơn. Đây chỉ là một ví dụ cho các loại biến ảnh hưởng đến hành vi của một chương trình giống hệt nhau.