Proofread C notes and new macro section

This commit is contained in:
2025-03-25 10:10:24 +00:00
parent c585dd37f7
commit a68addee15
2 changed files with 55 additions and 28 deletions

View File

@@ -13,12 +13,12 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "notes/ready/how_to_computer/index.md", "file": "notes/ready/c-language.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "index" "title": "c-language"
} }
} }
] ]
@@ -78,7 +78,7 @@
} }
], ],
"direction": "horizontal", "direction": "horizontal",
"width": 224.5 "width": 200
}, },
"right": { "right": {
"id": "f049c1d8215eafd9", "id": "f049c1d8215eafd9",
@@ -141,13 +141,13 @@
"state": { "state": {
"type": "outline", "type": "outline",
"state": { "state": {
"file": "notes/ready/how_to_computer/index.md", "file": "notes/ready/c-language.md",
"followCursor": false, "followCursor": false,
"showSearch": false, "showSearch": false,
"searchQuery": "" "searchQuery": ""
}, },
"icon": "lucide-list", "icon": "lucide-list",
"title": "Outline of index" "title": "Outline of c-language"
} }
}, },
{ {
@@ -165,7 +165,7 @@
} }
], ],
"direction": "horizontal", "direction": "horizontal",
"width": 246.5 "width": 200
}, },
"left-ribbon": { "left-ribbon": {
"hiddenItems": { "hiddenItems": {
@@ -181,6 +181,13 @@
}, },
"active": "91a2b2f8427bd50b", "active": "91a2b2f8427bd50b",
"lastOpenFiles": [ "lastOpenFiles": [
"notes/ready/how_to_computer/index.md",
"notes/ready/c-language.md",
"notes/ready/compiling.md",
"posts/dotfiles.md",
"posts/exploring-freebsd.md",
"posts/nix-starter-guide.md",
"posts/wayland-vs-xorg.md",
"textgenerator/templates/awesomePrompts/statisticianAwesome.md", "textgenerator/templates/awesomePrompts/statisticianAwesome.md",
"textgenerator/templates/awesomePrompts/techreviewerAwesome.md", "textgenerator/templates/awesomePrompts/techreviewerAwesome.md",
"textgenerator/templates/awesomePrompts/pythoninterpreterAwesome.md", "textgenerator/templates/awesomePrompts/pythoninterpreterAwesome.md",
@@ -200,13 +207,6 @@
"textgenerator/templates/awesomePrompts/spokenenglishteacherandimproverAwesome.md", "textgenerator/templates/awesomePrompts/spokenenglishteacherandimproverAwesome.md",
"textgenerator/templates/awesomePrompts/softwarequalityassurancetesterAwesome.md", "textgenerator/templates/awesomePrompts/softwarequalityassurancetesterAwesome.md",
"textgenerator/templates/awesomePrompts/proofreaderAwesome.md", "textgenerator/templates/awesomePrompts/proofreaderAwesome.md",
"textgenerator/templates/awesomePrompts/technologytransfererAwesome.md",
"textgenerator/templates/awesomePrompts/wikipediapageAwesome.md",
"textgenerator/templates/awesomePrompts/plagiarismcheckerAwesome.md",
"textgenerator/templates/awesomePrompts/socratAwesome.md",
"textgenerator/templates/awesomePrompts/webbrowserAwesome.md",
"textgenerator/templates/awesomePrompts/selfhelpbookAwesome.md",
"textgenerator/templates/awesomePrompts/speechlanguagepathologistslpAwesome.md",
"textgenerator/templates/awesomePrompts", "textgenerator/templates/awesomePrompts",
"textgenerator/templates", "textgenerator/templates",
"textgenerator", "textgenerator",

View File

@@ -1,19 +1,21 @@
--- ---
title: C Language title: C Language
description: description: The C Programming Language
summary: The C Programming Language
draft: false draft: false
tags: tags:
- c - c
- programming - programming
author: TrudeEH author: TrudeEH
showToc: true showToc: true
weight: "2"
--- ---
## Tools ## Tools
- `indent` (format code) - `indent` (format code)
- `gcc` / `clang` (compile code) - `gcc` / `clang` (compile code)
- `man <function>` (see function documentation) - `man <function/topic>` (read documentation)
- `tldr <command>` (quick command usage examples) - `tldr <command>` (quick command usage examples)
- `valgrind` (Look for memory leaks) - `valgrind` (Look for memory leaks)
- `valgrind —tool=massif` (check a program's RAM usage) - `valgrind —tool=massif` (check a program's RAM usage)
@@ -98,11 +100,12 @@ printf("Item1: %-8.2\n", item1);
## Numbers ## Numbers
`C` can handle multiple numeric bases. `C` handles multiple numeric bases.
```C ```C
int x = 255; // Decimal int x = 255; // Decimal
int y = 0xff; // Hexadecimal int y = 0xff; // Hexadecimal
int z = 0b10; // Binary (not native for C, but GCC and Clang support this syntax)
``` ```
### Type Casting ### Type Casting
@@ -146,13 +149,40 @@ Add `const` before a variable declaration to prevent the value from being change
const float PI 3.14159; const float PI 3.14159;
``` ```
Another option is to use `define`. ## Macros
### Object-Like Macros
Another alternative to `const` is to use `define`.
```C ```C
#define MAX 9 #define MAX 9
int test = MAX;
#undef MAX # Delete the macro
#define MAX 11 # Create a new macro with the same name
``` ```
This command replaces the 'MAX' word with '9', using the preprocessor (before compiling). No extra memory required. This command replaces the 'MAX' word with '9', using the preprocessor (before compiling); No memory is required.
### Function-Like Macros
Function-Like Macros behave in the same way as previous macros, but they can accept arguments to replace in the final code:
```c
#define Max(a,b) ((a)>(b)) ? (a):(b))
int i = Max(4,5);
```
In this example, the code pre-compiles to:
```c
int i = ((4)>(5)) ? (4):(5));
```
Read the [GNU's C Preprocessor](https://gcc.gnu.org/onlinedocs/cpp/) manual for more details.
> Macros have no type safety checks, so, if possible, avoid using them. To build the final C code (before it is compiled), use `gcc -E`.
## Arithmetic Operators ## Arithmetic Operators
@@ -179,7 +209,7 @@ x*=2; // x = x * 2
### Boolean Values ### Boolean Values
In `C`, there are no `true` or `false` keywords, so integers are used instead. In `C`, there are no `true` or `false` keywords, so integers are used instead.
- `0` generally represents `false`. - `0` usually represents `false`.
- Any non-zero value (`1`, `-1`, etc…) represents `true`. - Any non-zero value (`1`, `-1`, etc…) represents `true`.
### IF Statement ### IF Statement
@@ -204,7 +234,7 @@ else{
### Switch Statement ### Switch Statement
Faster than IF when over 5 cases. Generally faster than `IF` when over 5 cases.
```C ```C
switch(grade){ switch(grade){
@@ -346,7 +376,7 @@ void plusOne(int n) {
### Function Prototypes ### Function Prototypes
Function declaration without a body, before `main()`. Function declaration without a body, before `main()`.
Prototypes ensure that calls to a function are made with the correct arguments, and allow functions to be defined under the function call. Prototypes ensure that calls to a function are made with the correct arguments, and allow functions to be defined after the function call.
```C ```C
void hello(char[], int); // Function Prototype void hello(char[], int); // Function Prototype
@@ -472,6 +502,7 @@ typedef struct {
char password[12]; char password[12];
int id; int id;
} User; } User;
int main(){ int main(){
User user1 = {"Trude", "hello123", 12335}; User user1 = {"Trude", "hello123", 12335};
} }
@@ -487,7 +518,7 @@ int main(){
## Command-Line Arguments ## Command-Line Arguments
- `argc` is the number of arguments in `argv`. - `argc` is the number of arguments in `argv`.
- `argv[0]` is the name of the program, all others are the user arguments. - `argv[0]` is the name of the program, all others are the user arguments (the entire command used to initialize the program is stored).
```C ```C
int main(int argc, char argv[]) { int main(int argc, char argv[]) {
@@ -520,7 +551,7 @@ int main(){
## Memory Management ## Memory Management
- `a` - A variable - `a` - A variable
- `&a` - The address of the variable `a` in memory. (The format is `%p`) - `&a` - The address of the variable `a` in memory. (The formatter is `%p`)
- `int *p` - A pointer. Holds the memory address of another variable. (8 bits usually, depends on the CPU architecture (max RAM supported). - `int *p` - A pointer. Holds the memory address of another variable. (8 bits usually, depends on the CPU architecture (max RAM supported).
- `*p` - Dereference a pointer. Returns the value in the address stored. (go to address's variable) - `*p` - Dereference a pointer. Returns the value in the address stored. (go to address's variable)
@@ -531,7 +562,7 @@ int valueOfAge = *pAge;
printf("%p and %p are the same.", &age, pAge); printf("%p and %p are the same.", &age, pAge);
``` ```
NOTE: A pointer must be `int`, as it points to a memory address. > A pointer must be `int`, as it stores a memory address.
### Strings ### Strings
@@ -636,13 +667,9 @@ int main(void){
```C ```C
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
int age;
char name[25]; char name[25];
printf("What is your name? ");
fgets(name, 25, stdin); // name of variable, max size, input. fgets(name, 25, stdin); // name of variable, max size, input.
name[strlen(name)-1] = '\0'; // removes the line break fgets adds. String library is required. name[strlen(name)-1] = '\0'; // removes the line break fgets adds. String library is required.
printf("How old are you? ");
scanf("%d", &age);
``` ```
## Files ## Files