Node:Constant expressions, Previous:const, Up:Constants

Constant expressions

You can declare constant expressions explicitly as a particular type of value, such as a long integer, a float, a character, or a hexadecimal value, with certain typographical conventions. For example, it is possible to declare a value explicitly as a long by placing the letter L after the numeric constant. For example:

#define MY_LONG1 23L;
#define MY_LONG2 236526598L;

Similarly, you can declare a value to be a float by appending the letter F to it. Of course, numeric constants containing a decimal point are automatically considered floats. The following constants are both floating-point numbers:

#define MY_FLOAT1 23F;
#define MY_FLOAT2 23.5001;

You can declare a hexadecimal (base-16) number by prefixing it with 0x; you can declare an octal (base-8) number by prefixing it with 0. For example:

int my_hex_integer = 0xFF;   /* hex FF */
int my_octal_integer = 077;  /* octal 77 */

You can use this sort of notation with strings and character constants too. ASCII character values range from 0 to 255. You can print any character in this range by prefixing a hexadecimal value with \x or an octal value with \. Consider the following code example, which demonstrates how to print the letter A, using either a hexadecimal character code (\x41) or an octal one (\101).

#include <stdio.h>

/* To shorten example, not using argp */
int main ()
  printf ("\\x41 hex   = \x41\n");
  printf ("\\101 octal = \101\n");

  return 0;

The preceding code prints the following text:

\x41 hex   = A
\101 octal = A

Of course, you can assign a variable declared with the const qualifier (the first kind of "constant" we examined) a constant expression declared with one of the typographical expressions above. For example:

const int my_hex_integer = 0xFF;   /* hex FF */
const int my_octal_integer = 077;  /* octal 77 */