awesome-lists/c-cheatsheet.md
2025-03-15 08:51:02 +01:00

19 KiB
Raw Permalink Blame History

C Programming Language Cheatsheet

Program Structure

#include <stdio.h>  // Include standard I/O library

// Function prototype declaration
void myFunction(int param);

// Global variables
int globalVar = 10;

// Main function - program entry point
int main() {
    // Code statements
    printf("Hello, World!\n");
    
    return 0; // Return value to OS (0 = success)
}

// Function definition
void myFunction(int param) {
    // Function body
}

Data Types

Type Description Format Specifier Example
int Integer %d or %i int x = 10;
float Single-precision floating point %f float y = 10.5f;
double Double-precision floating point %lf double z = 10.5;
char Single character %c char c = 'A';
char[] String (character array) %s char str[] = "hello";
short Short integer %hd short s = 10;
long Long integer %ld long l = 10L;
long long Long long integer %lld long long ll = 10LL;
unsigned int Unsigned integer %u unsigned int ui = 10u;
unsigned char Unsigned character %c unsigned char uc = 255;
size_t Size type (for sizes) %zu size_t size = sizeof(int);

Variable Declaration

// Basic declaration
int a;           // Declaration
int b = 10;      // Declaration with initialization
const int MAX = 100;  // Constant (cannot be modified)

// Multiple variables
int x, y, z;
int p = 1, q = 2, r = 3;

// Type modifiers
unsigned int positive;  // Only non-negative values
signed int withSign;    // Can be positive or negative
long int bigNumber;     // Larger range of values
short int smallNumber;  // Smaller range of values

Operators

Arithmetic Operators

Operator Description Example Result
+ Addition a + b 13
- Subtraction a - b 7
* Multiplication a * b 30
/ Division a / b 3 (integer division)
% Modulus (remainder) a % b 1
- Negation -a -10
++ Increment a++ a becomes 11
-- Decrement b-- b becomes 2

Comparison Operators

Operator Description Example
== Equal to a == b
!= Not equal to a != b
> Greater than a > b
< Less than a < b
>= Greater than or equal to a >= b
<= Less than or equal to a <= b

Logical Operators

Operator Description Example
&& Logical AND a && b
|| Logical OR a || b
! Logical NOT !a

Bitwise Operators

Operator Description Example Notes
& Bitwise AND a & b
| Bitwise OR a | b
^ Bitwise XOR a ^ b
~ Bitwise NOT ~a
<< Left shift a << 2 Multiply by 2²
>> Right shift a >> 2 Divide by 2²

Assignment Operators

Operator Description Equivalent
= Simple assignment a = b
+= Add and assign a = a + b
-= Subtract and assign a = a - b
*= Multiply and assign a = a * b
/= Divide and assign a = a / b
%= Modulus and assign a = a % b
&= Bitwise AND and assign a = a & b
|= Bitwise OR and assign a = a | b
^= Bitwise XOR and assign a = a ^ b
<<= Left shift and assign a = a << b
>>= Right shift and assign a = a >> b

Control Structures

Conditional Statements

Statement Syntax Description
If if (condition) { statements } Executes statements if condition is true
If-else if (condition) { statements1 } else { statements2 } Executes statements1 if condition is true, otherwise statements2
If-else if-else if (condition1) { statementsA } else if (condition2) { statementsB } else { statementsC } Tests multiple conditions in sequence
Ternary operator result = (condition) ? valueIfTrue : valueIfFalse; Shorthand for simple if-else assignment
Switch switch (expression) { case value1: statements1; break; case value2: statements2; break; default: statementsDefault; } Multi-way branch based on expression value

Switch Statement Example

switch (grade) {
    case 'A':
        printf("Excellent!\n");
        break;
    case 'B':
        printf("Good job!\n");
        break;
    case 'C':
        printf("Average performance.\n");
        break;
    default:
        printf("Need improvement.\n");
}

Loops

Loop Type Syntax Description
For for (initialization; condition; update) { statements } Repeats statements while condition is true, with initialization before first iteration and update after each iteration
While while (condition) { statements } Repeats statements while condition is true
Do-while do { statements } while (condition); Executes statements at least once, then repeats while condition is true

Loop Control

Statement Description
break; Exits the innermost loop or switch
continue; Skips to the next iteration of the loop

Arrays

// Declaration and initialization
int numbers[5];              // Uninitialized array of 5 integers
int scores[5] = {90, 85, 88, 92, 76};  // Initialized array
int partial[5] = {90, 85};   // Remaining elements initialized to 0
int auto_size[] = {1, 2, 3}; // Size determined automatically (3)

// Accessing elements (0-indexed)
int first = scores[0];       // 90
scores[4] = 95;              // Modify element

// Multidimensional arrays
int matrix[3][4];            // 3×4 matrix (3 rows, 4 columns)
int grid[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};
int value = grid[1][0];      // 4 (row 1, column 0)

Strings

// String declaration and initialization
char greeting[] = "Hello";  // Includes null terminator '\0' automatically
char name[10] = "John";     // Array size should be at least string length + 1
char empty[10] = "";        // Empty string

// Accessing characters
char first = name[0];       // 'J'
name[0] = 'j';              // Modify character

// Common string functions (include <string.h>)
strlen(str);       // String length (excludes null terminator)
strcpy(dest, src); // Copy string src to dest
strcat(dest, src); // Concatenate src to the end of dest
strcmp(s1, s2);    // Compare strings (0 if equal, <0 if s1<s2, >0 if s1>s2)
strchr(str, ch);   // Find first occurrence of character ch in str
strstr(str, sub);  // Find first occurrence of substring sub in str

Pointers

// Declaration and initialization
int x = 10;
int *ptr = &x;  // ptr contains the memory address of x

// Dereferencing (accessing the value at the address)
int value = *ptr;  // value = 10

// Pointer arithmetic
int arr[5] = {10, 20, 30, 40, 50};
int *p = arr;      // p points to the first element of arr
int second = *(p + 1);  // 20 (second element)

// Null pointer
int *nullPtr = NULL;  // Points to nothing (always check before dereferencing)

// Pointers and arrays
int arr[5] = {10, 20, 30, 40, 50};
int *ptr = arr;  // Points to first element
// These are equivalent:
int val1 = arr[2];
int val2 = *(arr + 2);
int val3 = ptr[2];
int val4 = *(ptr + 2);

Functions

Function Syntax

Component Syntax Description
Declaration return_type function_name(parameter_type param1, ...); Function prototype (declares the function)
Definition return_type function_name(parameter_type param1, ...) { statements } Actual function code
Call function_name(argument1, argument2, ...); Invoking the function
Return return value; Exit function and return a value (if not void)

Function Types and Examples

Function Type Example Description
With return value int add(int a, int b) { return a + b; } Returns calculated result
Without return value void printMessage(const char *msg) { printf("%s\n", msg); } Performs action, returns nothing
Pass by value void increment(int x) { x++; } Changes only affect local copy
Pass by reference void increment(int *x) { (*x)++; } Changes affect original variable
Recursive int factorial(int n) { if (n <= 1) return 1; return n * factorial(n-1); } Function calls itself

Parameter Passing

Method Example Call Effect on Original
By value increment(num); No change to original
By reference increment(&num); Original can be modified
Array process(array); Original array can be modified
Const reference display(const int *arr, int size); Prevents modification of original
// Example of function usage
int num = 5;
incrementByValue(num);      // num remains 5
incrementByReference(&num); // num becomes 6

Structures

// Structure definition
struct Person {
    char name[50];
    int age;
    float height;
};

// Declaration and initialization
struct Person person1;
struct Person person2 = {"John", 25, 1.75};

// Accessing members
strcpy(person1.name, "Jane");
person1.age = 22;
person1.height = 1.65;

// Structure pointer
struct Person *ptr = &person1;
printf("%s\n", ptr->name);  // Arrow operator for pointer access
// Equivalent to: printf("%s\n", (*ptr).name);

// Typedef for simpler naming
typedef struct {
    char title[100];
    char author[50];
    int year;
} Book;

Book novel = {"The Great Gatsby", "F. Scott Fitzgerald", 1925};

Memory Management

// Dynamic memory allocation (include <stdlib.h>)
int *ptr = malloc(5 * sizeof(int));  // Allocate memory for 5 integers
if (ptr == NULL) {
    // Allocation failed
}

// Initialize allocated memory
memset(ptr, 0, 5 * sizeof(int));  // Set all bytes to 0 (include <string.h>)

// Reallocation
ptr = realloc(ptr, 10 * sizeof(int));  // Resize to 10 integers

// Free allocated memory (prevent memory leaks)
free(ptr);
ptr = NULL;  // Good practice to avoid dangling pointers

File I/O

File Operations

Operation Function Description
Open FILE *file = fopen(filename, mode); Open a file with specified mode
Close fclose(file); Close a file and flush buffers
Check EOF feof(file) Check if end-of-file is reached
Get error ferror(file) Check if an error occurred
Flush fflush(file) Flush output buffer
Reposition fseek(file, offset, origin) Move file position indicator
Get position ftell(file) Get current file position
Rewind rewind(file) Set position to beginning of file

File Open Modes

Mode Description
"r" Read (file must exist)
"w" Write (create new or truncate existing)
"a" Append (create new or append to existing)
"r+" Read and write (file must exist)
"w+" Read and write (create new or truncate existing)
"a+" Read and append (create new or append to existing)
"b" Binary mode (add to modes above, e.g., "rb", "wb")

Text File I/O

Operation Function Description
Read formatted fscanf(file, format, ...) Read formatted data
Write formatted fprintf(file, format, ...) Write formatted data
Read line fgets(buffer, size, file) Read a line of text
Write string fputs(string, file) Write a string
Read character fgetc(file) or getc(file) Read a character
Write character fputc(c, file) or putc(c, file) Write a character

Binary File I/O

Operation Function Description
Read fread(buffer, size, count, file) Read binary data
Write fwrite(buffer, size, count, file) Write binary data

Example

// Writing to a text file
FILE *file = fopen("data.txt", "w");
if (file == NULL) {
    perror("Error opening file");
    return 1;
}
fprintf(file, "Name: %s, Age: %d\n", "John", 25);
fclose(file);

// Reading from a text file
char name[50];
int age;
file = fopen("data.txt", "r");
if (file != NULL) {
    fscanf(file, "Name: %s, Age: %d", name, &age);
    fclose(file);
}

Preprocessor Directives

Basic Preprocessor Directives

Directive Syntax Description
Include #include <filename> Include system header file
Include #include "filename" Include local header file
Define #define NAME value Define a macro constant
Define function #define NAME(params) expression Define a function-like macro
Undefine #undef NAME Remove a macro definition
Error #error message Force compilation error with message
Pragma #pragma token Implementation-specific instructions

Conditional Compilation

Directive Syntax Description
If defined #ifdef SYMBOL True if SYMBOL is defined
If not defined #ifndef SYMBOL True if SYMBOL is not defined
If expression #if EXPRESSION True if EXPRESSION is non-zero
Else if #elif EXPRESSION Alternative condition
Else #else Default condition
End if #endif End conditional block

Predefined Macros

Macro Description
__FILE__ Current source filename (string)
__LINE__ Current line number (integer)
__DATE__ Compilation date (string)
__TIME__ Compilation time (string)
__STDC__ 1 if compiler conforms to ANSI C
__cplusplus Defined when compiled with C++ compiler
__func__ Current function name (string)

Macro Examples

// Simple constant macro
#define PI 3.14159

// Function-like macro with arguments
#define SQUARE(x) ((x) * (x))
#define MAX(a, b) ((a) > (b) ? (a) : (b))

// Stringification operator (#)
#define STRINGIFY(x) #x
// Usage: STRINGIFY(hello) becomes "hello"

// Token concatenation operator (##)
#define CONCAT(a, b) a##b
// Usage: CONCAT(num, 123) becomes num123

Error Handling

// Error handling with return values
if (function() == -1) {
    // Handle error
}

// Using errno (include <errno.h>)
#include <errno.h>
if (func() == -1) {
    printf("Error: %d\n", errno);
    perror("Error message");  // Print error message based on errno
}

// Exit program (include <stdlib.h>)
exit(EXIT_SUCCESS);  // Normal termination
exit(EXIT_FAILURE);  // Error termination

Command Line Arguments

int main(int argc, char *argv[]) {
    // argc: Number of arguments (including program name)
    // argv: Array of argument strings
    
    printf("Program name: %s\n", argv[0]);
    
    for (int i = 1; i < argc; i++) {
        printf("Argument %d: %s\n", i, argv[i]);
    }
    
    return 0;
}

Common Library Functions

Standard I/O (stdio.h)

Function Syntax Description
printf printf("Format", args...); Formatted output to stdout
scanf scanf("%d", &variable); Formatted input from stdin
puts puts("string"); Output string with newline
gets gets(string); Input string (unsafe, avoid using)
putchar putchar('c'); Output character
getchar getchar(); Input character
fprintf fprintf(file, "Format", args); Formatted output to file
fscanf fscanf(file, "%d", &var); Formatted input from file
fgets fgets(str, size, file); Input line from file (safe)
sprintf sprintf(str, "Format", args); Formatted output to string

String Handling (string.h)

Function Syntax Description
strlen strlen(str); String length
strcpy strcpy(dest, src); String copy
strncpy strncpy(dest, src, n); Copy up to n characters
strcat strcat(dest, src); String concatenation
strncat strncat(dest, src, n); Concatenate up to n characters
strcmp strcmp(s1, s2); String comparison
strncmp strncmp(s1, s2, n); Compare up to n characters
strchr strchr(str, c); Find character in string
strstr strstr(str, substr); Find substring in string
strtok strtok(str, delim); Tokenize string

Memory Functions (string.h)

Function Syntax Description
memcpy memcpy(dest, src, n); Memory copy
memmove memmove(dest, src, n); Safe memory copy (handles overlap)
memset memset(ptr, value, n); Fill memory with value
memcmp memcmp(ptr1, ptr2, n); Compare memory blocks

Math Functions (math.h)

Function Syntax Description
sqrt sqrt(x); Square root
pow pow(x, y); x raised to power y
ceil ceil(x); Round up to integer
floor floor(x); Round down to integer
round round(x); Round to nearest integer
fabs fabs(x); Absolute value (float)
sin, cos, tan sin(x); Trigonometric functions
asin, acos, atan asin(x); Inverse trigonometric functions
log, log10 log(x); Natural and base-10 logarithms
exp exp(x); e raised to power x

Character Functions (ctype.h)

Function Syntax Returns true if character is...
isalpha isalpha(c); Alphabetic (a-z, A-Z)
isdigit isdigit(c); Decimal digit (0-9)
isalnum isalnum(c); Alphanumeric (a-z, A-Z, 0-9)
isspace isspace(c); Whitespace (space, tab, newline, etc.)
islower islower(c); Lowercase (a-z)
isupper isupper(c); Uppercase (A-Z)
tolower tolower(c); Convert to lowercase
toupper toupper(c); Convert to uppercase

Memory Management (stdlib.h)

Function Syntax Description
malloc malloc(size); Allocate memory
calloc calloc(n, size); Allocate and zero memory
realloc realloc(ptr, size); Resize memory allocation
free free(ptr); Free allocated memory

Other Utility Functions (stdlib.h)

Function Syntax Description
atoi atoi(str); Convert string to int
atof atof(str); Convert string to double
rand rand(); Generate random number
srand srand(seed); Seed random number generator
qsort qsort(arr, n, size, cmp); Sort array
bsearch bsearch(key, arr, n, size, cmp); Binary search
exit exit(status); Terminate program
abs abs(n); Integer absolute value

Time Functions (time.h)

Function Syntax Description
time time(NULL); Current time (seconds since epoch)
clock clock(); Processor time used
difftime difftime(time2, time1); Time difference in seconds
localtime localtime(&time_t); Convert to local time struct
strftime strftime(str, size, format, tm); Format time as string