Различие и определение литеральных и символических констант в C?
У меня возникли проблемы с определением и использованием символических и буквальных констант, и мне было интересно, может ли кто-нибудь объяснить их и выделить их различия. Спасибо!
4 ответов
символ-это то, с чем имеет дело компилятор. Компилятор обрабатывает const
в значительной степени так, как он обрабатывает переменную. С другой стороны,#define
- это то, о чем компилятор даже не знает, потому что прекомпилятор преобразует его в свое значение. Это как найти-и-заменить. Если вы это сделаете
#define A 5
а то
b += A;
прекомпилятор переводит его в
b += 5;
и все, что видит компилятор, это число 5.
литеральная константа-это значение, введенное непосредственно в вашу программу, где это необходимо. Например
int tempInt = 10;
tempInt-переменная типа int; 10-литеральная константа. Вы не можете присвоить значение 10, и его значение нельзя изменить. Символьная константа-это константа, которая представлена именем, так же как и переменная. Однако, в отличие от переменной, после инициализации константы ее значение нельзя изменить.
Если ваш программа имеет одну целочисленную переменную с именем students и другие именованные классы, вы можете вычислить, сколько у вас студентов, учитывая известное количество классов, если бы вы знали, что на класс приходится 15 студентов:
студенты = классы * 15;
Я думаю, что вы имеете в виду, что литеральная константа является примитивным выражением, таким как "строка" или 2 или false, а символическое-когда вы даете ему имя, например const int MagicNumber = 42. Оба могут использоваться в качестве выражений, но вы можете ссылаться на последнее с именем. Полезно, если вы используете одну и ту же константу из многих мест.
(заимствование из более ранних постов) Литеральная константа-это значение, введенное непосредственно в вашу программу, где это необходимо. Например
int breakpoint = 10;
переменная точка останова представляет собой целое число (int); 10-литеральная константа. Вы не можете присвоить значение 10, и его значение нельзя изменить. В отличие от переменной константа не может быть изменена после присвоения ей значения (инициализации).
символ-это то, с чем имеет дело компилятор. В этом примере TEN является символическим константа, созданная с помощью функции #define. #Define-это то, о чем компилятор даже не знает, потому что precompiler преобразует его в назначенное (определенное) значение. Precompiler ищет и заменяет каждую константу символа внутри вашей программы значением.
#define TEN 10 /* These two lines of code become one... */
breakpoint += TEN; /* after running through the precompiler */
прекомпилятор переводит его в
Breakpoint += 10;
компилятор не видит десять, а только его значения 10. Почему это полезно? Что делать, если точка останова изменена на 11. Вместо того чтобы просматривая всю программу и изменяя каждое определение переменной на новое значение, заданное с помощью литеральной константы 10, измените определение константы одного символа... Десяти до 11 и пусть прекомпилятором сделать изменения для вас.