Зазвичай в C ми повинні сказати комп'ютеру тип даних у змінному оголошенні. Наприклад, у наступній програмі я хочу надрукувати суму двох чисел з плаваючою комою X та Y.
#include<stdio.h>
main()
{
float X=5.2;
float Y=5.1;
float Z;
Z=Y+X;
printf("%f",Z);
}
Я повинен був сказати компілятору тип змінної X.
- Не може компілятор
Xсамостійно визначити тип ?
Так, це можна, якщо я це роблю:
#define X 5.2
Тепер я можу написати свою програму, не повідомляючи компілятору тип X:
#include<stdio.h>
#define X 5.2
main()
{
float Y=5.1;
float Z;
Z=Y+X;
printf("%f",Z);
}
Отже, ми бачимо, що мова С має якусь особливість, за допомогою якої вона може визначати тип даних самостійно. У моєму випадку було визначено, що Xце тип float.
- Чому ми мусимо згадувати тип даних, коли ми декларуємо щось головне ()? Чому компілятор не може самостійно визначити тип даних змінної,
main()як це робиться в#define.
#define X 5.2, Xце не змінна, а константа, тому вона буквально замінюється бути препроцесором з 5.2будь-якого місця, про яке ви згадали X. Ви не можете перепризначити X.
autoнасправді робить те, що ви хочете). З іншого боку, якщо ви думаєте, що знаєте, що робить ваш код, і ви насправді набрали щось інше, статичне введення тексту подібне до цього виявить помилку раніше, перш ніж це стане величезною проблемою. Кожна мова виявляє рівновагу: статичне введення тексту, інформування типів, динамічне введення тексту. Для деяких завдань додаткове набір тексту насправді того вартий. Для інших це марно.
5.2є adouble, тому перша програмаfloatточно округляє подвійні літерали , потім додає їх як плавні, тоді як друга округляє подвійне представлення 5.1 назадdoubleі додає його доdoubleзначення 5.2 за допомогоюdoubleдодавання, потім округляє результат цього обчислення доfloatточності . Оскільки округлення відбувається в різних місцях, результат може відрізнятися. Це лише один приклад для типів змінних, що впливають на поведінку інакше ідентичної програми.