C programming
- There is a small, fixed number of keywords, including a full set of flow of control primitives:
for
,if/else
,while
,switch
, anddo/while
. There is one user-defined names are not distinguished from keywords by any kind of sigil. - There are a large number of arithmetical and logical operators, such as
+
,+=
,++
,&
,~
, etc. - More than one assignments may be performed in a single statement.
- Function return values can be ignored when not needed.
- Typing is static but weakely enforced all data has a type, but implicit conversions can be performed; for instance, characters can be used as integers.
- Diclearation syntax mimics usage context. C has no “define” keyword; instead, a statement beginning with the name of a type is taken as a declaration. There is no “function” keyword; instead, a function is indicated by the parentheses of an argument list.
- User-defined (
typedef
) and compound types are possible.- Heterogeneous aggregate data types (
struct
) allow related data elements to be accessed and assigned as a unit. - Array indexing is a secondary notion, defined in terms of pointer arithmetic. Unlike structs, arrays are not first-class objects; they cannot be assigned or compared using single built-in operators. There is no “array” keyword, in use or definition; instead, square brackets indicate arrays syntactically, e.g.
month[11]
. - Enumerated types are possible with the
enum
keyword. They are not tagged, and are freely interconvertible with integers. - Strings are not a separate data type, but are conventionally implemented as null-terminated arrays of characters.
- Heterogeneous aggregate data types (
- Low-level access to computer memory is possible by converting machine addresses to typed pointers.
- Procedurea (subroutines not returning values) are a special case of function, with an untyped return type
void
. - Functions may not be defined within the lexical scope of other functions.
- Function and data pointers permit ad hoc run time polymorphism.
- A preprocessor performs macro definition, source code file inclusion, and conditional compilelation.
- There is a basic form of modularity: files can be compiled separately and linked together, with control over which functions and data objects are visible to other files via
static
andextern
attributes. - Complex functionality such as i/o string manipulation, and mathematical functions are consistently delegated to library routines.