From 078df39f6abab46ff5015bea20cf44c4a4925999 Mon Sep 17 00:00:00 2001
From: FreeArtMan <dos21h@gmail.com>
Date: Sat, 6 Aug 2022 19:26:31 +0100
Subject: Add if and for

---
 md/notes/undefined_c/titles.md | 148 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 144 insertions(+), 4 deletions(-)

(limited to 'md/notes/undefined_c')

diff --git a/md/notes/undefined_c/titles.md b/md/notes/undefined_c/titles.md
index 11d5271..2a47cc0 100644
--- a/md/notes/undefined_c/titles.md
+++ b/md/notes/undefined_c/titles.md
@@ -4,7 +4,22 @@ keywords:c,linux,asm
 # Undefined C
 
 There is possible to piece of code inside online c compiler like https://www.onlinegdb.com/online_c_compiler
-Or run locally
+Or run locally. With base check is done with gcc compiler.
+
+## Compile
+
+
+__hello_world.c__
+```c
+int main() {
+	printf("Hello world\n");
+}
+```
+
+```bash
+gcc hello_world.c -o hello_world
+gcc -m32 hello_world.c -o hello_world_32 #for 32bit target
+```
 
 ## Syntax
 
@@ -35,6 +50,8 @@ int main() {
 }
 ```
 
+Most safest/portable way is to use [u]int[8/16/32/64]_t types. 
+
 Defined macros'es to get type max and min values are
 
 https://en.cppreference.com/w/c/types/limits
@@ -48,9 +65,16 @@ int main() {
 }
 ```
 
+Example from AVR __stdint.h__   
+https://github.com/avrdudes/avr-libc/blob/main/include/stdint.h  
+Example from Libc  
+https://sourceware.org/git/?p=glibc.git;a=blob;f=stdlib/stdint.h  
+
+
+
 #### How to shoot the leg
 
-When code suppose to run on 32bit and 64bit platform the size of type may vary. n
+When code suppose to run on 32bit and 64bit platform the size of type may vary.
 Need to take in account this case.
 
 
@@ -59,17 +83,121 @@ Need to take in account this case.
 
 ### Functions
 
+Function syntax, there is nothing interesting on functions
 
+```
+<RETURN_TYPE> <NAME>(<TYPE> <NAME>,..) {
+    <EXPR>
+}
+```
+
+Write simple function
+
+```c
+int fun1() {
+    return -1;
+}
+```
+
+Function can have multiple return statements.
+Here is example whne function have 3 return values.
+```c
+int fun2(int i) {
+    if (i<0) return -1;
+    if (i>0) return 1;
+    return 0;
+}
+```
+
+Get address of function 
+
+```c
+printf("fun1 address %016x",&fun1);//64bit platform
+```
 
 ### If statement
+
+```c
+if () ;
+if () {}
+```
+
+One of the way to check error of returned functions is 
+
+```c
+if ((c = getfun()) == 0) {
+}
+```
+
+Most simplest and outdated way to do this is when getting input from command line
+```c
+#include <stdio.h>
+int main() {
+    int c;
+    char ch;
+    while ((c = getchar()) != EOF ) {
+        ch = c;
+        printf("Typed character %c\n",c);
+    }
+}
+```
+
 ### For cycle
+
+For loop is one that may involve some trickery, its 
+as simple as 
+
+```c
+for (<INITIAL>;<TERMINATE CONDITION>;<AFTER CYCLE>) {
+}
+```
+
+Go over values from 1 till 10
+
+```c
+int i=0;
+for (i=1;i<=10;i++) {
+    printf("%d\n",i)
+}
+```
+
+Now lets do it from 10 till 1
+
+```c
+int i=0;
+for (i=10;i>0;i--) {
+    printf("%d\n",i)
+}
+```
+
+Now lets make one liner
+
+```c
+for (i=0;i<10;i++,printf("%d\n",i));
+```
+
+Yes there is possible to write as many expressions as needed.
+
+
 ### Structure
 ### Recursion  
 ### Macro
 ### Signed/Unsigned
+### Pointers
 ### Endianess 
+### Static binary
+### Dynamic binary
 ### Styles
 ### Compiler flags
+### Allocate memory
+### stdin,stdout,stderr
+
+
+
+## Basic usage
+
+### File manipulation
+### File manipulation with syscalls
 
 ## Base usage
 
@@ -77,12 +205,23 @@ Need to take in account this case.
 ### Write plugins
 
 
-### Intermediate usage
+## Advanced cases
 
-## Linking
+### Linking
+### Extern
+### Attributes
 ### Creating shared library
 ### Create static libraries
 ### Join all objects together
+### Compile with musl
+### Inspect elf files
+### No standard library
+### Memory leaks
+### Code coverage
+### Profiling
+### Canary
+### Atomic
+### Multithreading
 
 
 ## Embedding  
@@ -103,6 +242,7 @@ Need to take in account this case.
 ### Check architecture
 ### ARMv8
 ### AVR8
+### Emscripten
 
 
 ## Graphics
-- 
cgit v1.2.3