From WikiChip
Difference between revisions of "c/variables"
< c

(Naming Rules: added a note about reserved keywords)
(object's size)
Line 74: Line 74:
 
<source lang="C">
 
<source lang="C">
 
int foo = 1, bar = 2, baz = 3;
 
int foo = 1, bar = 2, baz = 3;
 +
</source>
 +
 +
== Object's size ==
 +
{{main|sizeof operator - C|l1=sizeof operator}}
 +
In many cases it might be useful to know the size of an object. Knowing the size of an object is also required if you want to allocate the object dynamically. The size of the object can be retrieved via the '''[[sizeof operator - C|sizeof]]''' operator which returns the amount of storage, in bytes, that is required to store an object of the type of the operand specified. The [[sizeof operator - C|sizeof operator]] should always be used in order to [[hard-code]] machine-dependent type sizes.
 +
 +
The sizeof operator has the following syntax:
 +
 +
<source lang="text">
 +
sizeof unary-expression
 +
sizeof (type-name)
 +
</source>
 +
 +
For example,
 +
 +
<source lang="C">
 +
#include <stdio.h>
 +
int main()
 +
{
 +
    printf("Size of 'int' is: %zu\n", sizeof (int));
 +
    return 0;
 +
}
 +
</source>
 +
 +
Will print the size of the <code>int</code> type on your machine. Note that we can apply the same operator on variables, for example:
 +
 +
<source lang="C">
 +
#include <stdio.h>
 +
int main()
 +
{
 +
    int x;
 +
    long y;
 +
    printf("Size of 'x' is: %zu, and 'y' is: %zu\n", sizeof x, sizeof y);
 +
    return 0;
 +
}
 
</source>
 
</source>
  
 
[[Category:C programming language]]
 
[[Category:C programming language]]
 
[[Category:C variables]]
 
[[Category:C variables]]

Revision as of 21:55, 26 December 2013

Many programs are far more complex than just printing a sentence or two on the screen. To be able to perform more complex operations and calculations we need a way to store values temporarily during the program execution. These named stored locations are called variables.

Data Types

Main article: Data Types

In C, every variable must have a type which specifies what kind of data it could hold. The type of variable determines how the variable is stored and what operations can be performed on it. For example, a variable of type int can store integers such as 2, -9, 83, and 5294. By contrast with float, which is capable of storing floating point values such as 3.4, 30, -943.234, and 2e6. C provides a wide variety of types in addition to an int and a float, including: char, short, and double.

Minimum Magnitudes

It is important to understand that the sizes of these objects are implementation-defined. That is, depending on the machine you use and the compiler used to compile the program, the actual range of values that each type can store can vary. The C Standard does impose a minimum magnitude for each value.

Naming Rules

Variables can be as short as a single character or as long as thirty. Variable names can be made up of uppercase and lowercase letters, digits, and underscores. All variables must not start with a digit. Variables may also not have the same name as a reserved keyword.

For example, the following are valid variable names:

x                  foo
x_y_z              BaR
_foo               bar45
_1                 baz
thisIsAReallyLongVariableName

The following, however, are not valid variable names:

2                  $apples
5foo               double

Additionally, the name of a variable cannot be a reserved word. For example, a variable named while or register is illegal.

Variable Declaration

A variable declaration is a statement that announces to the translator the creation of a new object and the kind of properties it possess. These properties include:

These properties are collectively named declaration-specifiers.

The syntax for variable declaration is: declaration-specifiers identifier;

For example, one might create a new object called 'foo' with the type int with the following line of code:

int foo;

Multiple variables can be declared at the same time if they have the same properties. For example,

int foo, bar, baz;

Creates three variables, foo, bar, and baz. All three have an int data type. Sometimes, variables might have multiple properties. These properties can be specified in a series before the variable name. For example,

signed int foo;
unsigned int bar;
const long baz;

Note that the order of declaration specifiers is unimportant. For example,

const unsigned int x;
unsigned const int y;
unsigned int const z;
int unsigned const a;
int const unsigned b;

Are all legal combinations of variable properties.

Initial value

Upon the creation of a variable, if no explicit value been assigned, the value of the variable depends on the storage specifier. If no storage specifier was explicitly used, the automatic storage class is assumed. Automatic variables do not have a specified initial value, therefore it is important to initialize it prior to using the variable. The variable declaration statement allows you specify an initial value as well. The syntax for that is declaration-specifiers identifier = <value>;. For example,

int foo = 99;

We can initialize multiple variables as well following the same pattern,

int foo = 1, bar = 2, baz = 3;

Object's size

Main article: sizeof operator

In many cases it might be useful to know the size of an object. Knowing the size of an object is also required if you want to allocate the object dynamically. The size of the object can be retrieved via the sizeof operator which returns the amount of storage, in bytes, that is required to store an object of the type of the operand specified. The sizeof operator should always be used in order to hard-code machine-dependent type sizes.

The sizeof operator has the following syntax:

sizeof unary-expression
sizeof (type-name)

For example,

#include <stdio.h>
int main()
{
    printf("Size of 'int' is: %zu\n", sizeof (int));
    return 0;
}

Will print the size of the int type on your machine. Note that we can apply the same operator on variables, for example:

#include <stdio.h>
int main()
{
    int x;
    long y;
    printf("Size of 'x' is: %zu, and 'y' is: %zu\n", sizeof x, sizeof y);
    return 0;
}