32 | | === Basic Things === |
33 | | |
34 | | To declare a string in a variable, you need to use strcpy, so |
35 | | {{{ |
36 | | #!C |
37 | | name = "Me"; /* Illegal */ |
38 | | strcpy (name, "Me"); /* Legal */ |
39 | | }}} |
40 | | |
41 | | When you assign a single character you need to enclose it in single-quotes ', if you want to assign a string (with the end-of-string (NULL) char included), you need to use double-quotes ". |
42 | | |
43 | | |
44 | | A good way to remove the newline value from variables (when you use a input-line entry system) is by simply set the end-of-string (NULL) value to the newline place, like: |
45 | | {{{ |
46 | | #!C |
47 | | fgets(first, sizeof(first), stdin); |
48 | | first[strlen(first)-1] = '\0'; |
49 | | }}} |
50 | | Remember that a string contains first a newline (if the input has included a newline) and all the strings finishes by the '\0' (NULL) character |
51 | | |
52 | | The '''break''' statement is for exit from a ''loop'', and the '''continue''' statement is for (re)start the loop again (continue from the start) |
53 | | |
54 | | The '''if''' statement is ''true'' when the value is ''non-zero'', zero means ''no data'' or ''null'', so that means false. If you need to check if a value is zero you can simply do: |
55 | | {{{ |
56 | | #!C |
57 | | if (var == 0) |
58 | | }}} |
59 | | ,,Maybe this sounds strange by doing it this way but if ''var'' is equal to 0, then the result of the '''()''' is 1 (true), if you don't understand why is 1 or how this works, you need to start reading a new book of C again...,, |
| 32 | |
| 33 | |
| 34 | |
| 35 | |
| 36 | === Variables === |
| 37 | |
| 38 | Variables inside functions (or main) are not ''heritable'' between functions, if you want to call a function with a variable you can use the ''arguments'' on the function call (or a pointer for argument) |
| 39 | |
| 40 | If you need a ''Global variable''' in your entire code, you need to declare them out of any function |
| 41 | |
| 42 | Every time you enclose a variable declaration inside a block '''{}''', it is limited to this section (will not work outside of it). If you have variables declared out of any function and/or out of main(), it is supported by all the entire application. Also, if you declare a variable inside a block that is already declared outside of it, then for inside the block it is used only the new declared one, not the one declared out of it, however, this practice is not good since may be very confusing. |
| 43 | |
| 44 | '''signed''': means ''with sign'', so, values negative and positive, for example if the '''char''' variable has a limit of 255 values, using the '''sign''' mode we can use from '''-128''' (negative) to '''127''' (positive), and using '''unsigned''' we can use from '''0''' to '''255''' |
| 45 | |
| 46 | ==== Extern ==== |
| 47 | You should '''ignore''' it since its the default when there's no anything set. It means that you can use and/or re-declare a function on other ''files'' of the code |
| 48 | |
| 49 | ==== Static ==== |
| 50 | You can use ''static'' inside a function or outside it, it has two different meanings: |
| 51 | * Inside a function: You can ''pre'' set a value to a variable ''(static int foo = 5)'', then the first time you enter on the function it will be set to 5, but the next times it not set again, it just remember the last value used |
| 52 | * Outside a function (global mode): You will use it only in the actual file (compilation unit), good for optimization but you can't use it on other files |
| 53 | |
| 54 | |
| 55 | ==== Void ==== |
| 56 | * In a function declaration means that the function returns no value |
| 57 | * When used in a pointer declaration (called ''pointer to void''), void defines a generic pointer, so it returns an address, it is commonly used when a function is called with differents types of data, and also very used on these ways: |
| 58 | {{{ |
| 59 | #!C |
| 60 | void *malloc( unsigned int ); /* function prototype for malloc */ |
| 61 | |
| 62 | string_ptr = malloc(80); /* We call malloc in order to allocate 80 bytes of memory, |
| 63 | it returns the address obtained, that is copied to the |
| 64 | string_ptr variable (so, the pointer to this address) */ |
| 65 | }}} |
| 66 | |
| 67 | |
| 68 | ==== Conversion ==== |
| 69 | |
| 70 | You can convert a variable type to other at any time by: |
| 71 | {{{ |
| 72 | #!C |
| 73 | int value = 5; |
| 74 | printf ("%f", (float)value ); |
| 75 | }}} |
| 76 | |
| 77 | |
| 78 | |
| 79 | |
| 80 | |
| 81 | |
| 82 | === Functions === |
| 83 | A function can be (re)called too (inside himself), this is known as ''recursion'' |
| 84 | |
| 85 | ==== Basic example ==== |
| 86 | |
| 87 | {{{ |
| 88 | #!C |
| 89 | float triangle (float width, float height) |
| 90 | ... |
| 91 | }}} |
| 92 | This function means: it needs to return a ''float'' variable, it is called with two parameters of type float too, this function can't modify directly the variables (width or height), for that is needed to use pointers (because we have the address (of memory) to that data instead the data value, so we can modify its content (data)) |
| 93 | |
| 94 | |
| 95 | ==== Structure of a function ==== |
| 96 | {{{ |
| 97 | #!C |
| 98 | [class_of_memorization] [type] name( [arguments] ) |
| 99 | // class: It will be static or extern (see Variables section) |
| 100 | // type: It will be anything (void, int, char, a pointer...), except an array |
| 101 | // arguments: Arguments to pass to a function, if any |
| 102 | }}} |
| 103 | |
| 104 | |
| 105 | ==== Modification of variables by pointers ==== |
| 106 | This is a example of a function call and modification by using pointers: |
| 107 | {{{ |
| 108 | #!C |
| 109 | void convert_to_42 ( int *input ) |
| 110 | { |
| 111 | *input = 42; |
| 112 | } |
| 113 | |
| 114 | int value = 12; |
| 115 | convert_to_42 ( &value ); |
| 116 | }}} |
| 117 | |
| 118 | |
| 119 | ==== Prototype of Functions ==== |
| 120 | When there's no arguments for the function, just put a ''void'' itself inside the (), so for the content of arguments. |
| 121 | |
| 122 | When there's arguments, you should add too a name of variable after it, the mean of this is just to be more easy to understand when reading the headers file for example |
| 123 | {{{ |
| 124 | #!C |
| 125 | double calc( double base, double exponent); |
| 126 | }}} |
| 127 | |
95 | | === Variables === |
96 | | |
97 | | Variables inside functions (or main) are not ''heritable'' between functions, if you want to call a function with a variable you can use the ''arguments'' on the function call (or a pointer for argument) |
98 | | |
99 | | If you need a ''Global variable''' in your entire code, you need to declare them out of any function |
100 | | |
101 | | Every time you enclose a variable declaration inside a block '''{}''', it is limited to this section (will not work outside of it). If you have variables declared out of any function and/or out of main(), it is supported by all the entire application. Also, if you declare a variable inside a block that is already declared outside of it, then for inside the block it is used only the new declared one, not the one declared out of it, however, this practice is not good since may be very confusing. |
102 | | |
103 | | '''signed''': means ''with sign'', so, values negative and positive, for example if the '''char''' variable has a limit of 255 values, using the '''sign''' mode we can use from '''-128''' (negative) to '''127''' (positive), and using '''unsigned''' we can use from '''0''' to '''255''' |
104 | | |
105 | | ==== Extern ==== |
106 | | You should '''ignore''' it since its the default when there's no anything set. It means that you can use and/or re-declare a function on other ''files'' of the code |
107 | | |
108 | | ==== Static ==== |
109 | | You can use ''static'' inside a function or outside it, it has two different meanings: |
110 | | * Inside a function: You can ''pre'' set a value to a variable ''(static int foo = 5)'', then the first time you enter on the function it will be set to 5, but the next times it not set again, it just remember the last value used |
111 | | * Outside a function (global mode): You will use it only in the actual file (compilation unit), good for optimization but you can't use it on other files |
112 | | |
113 | | |
114 | | ==== Void ==== |
115 | | * In a function declaration means that the function returns no value |
116 | | * When used in a pointer declaration (called ''pointer to void''), void defines a generic pointer, so it returns an address, it is commonly used when a function is called with differents types of data, and also very used on these ways: |
117 | | {{{ |
118 | | #!C |
119 | | void *malloc( unsigned int ); /* function prototype for malloc */ |
120 | | |
121 | | string_ptr = malloc(80); /* We call malloc in order to allocate 80 bytes of memory, |
122 | | it returns the address obtained, that is copied to the |
123 | | string_ptr variable (so, the pointer to this address) */ |
124 | | }}} |
125 | | |
168 | | |
169 | | |
170 | | |
171 | | === Functions === |
172 | | A function can be (re)called too (inside himself), this is known as ''recursion'' |
173 | | |
174 | | ==== Basic example ==== |
175 | | |
176 | | {{{ |
177 | | #!C |
178 | | float triangle (float width, float height) |
179 | | ... |
180 | | }}} |
181 | | This function means: it needs to return a ''float'' variable, it is called with two parameters of type float too, this function can't modify directly the variables (width or height), for that is needed to use pointers (because we have the address (of memory) to that data instead the data value, so we can modify its content (data)) |
182 | | |
183 | | |
184 | | ==== Structure of a function ==== |
185 | | {{{ |
186 | | #!C |
187 | | [class_of_memorization] [type] name( [arguments] ) |
188 | | // class: It will be static or extern (see Variables section) |
189 | | // type: It will be anything (void, int, char, a pointer...), except an array |
190 | | // arguments: Arguments to pass to a function, if any |
191 | | }}} |
192 | | |
193 | | |
194 | | ==== Modification of variables by pointers ==== |
195 | | This is a example of a function call and modification by using pointers: |
196 | | {{{ |
197 | | #!C |
198 | | void convert_to_42 ( int *input ) |
199 | | { |
200 | | *input = 42; |
201 | | } |
202 | | |
203 | | int value = 12; |
204 | | convert_to_42 ( &value ); |
205 | | }}} |
206 | | |
207 | | |
208 | | ==== Prototype of Functions ==== |
209 | | When there's no arguments for the function, just put a ''void'' itself inside the (), so for the content of arguments. |
210 | | |
211 | | When there's arguments, you should add too a name of variable after it, the mean of this is just to be more easy to understand when reading the headers file for example |
212 | | {{{ |
213 | | #!C |
214 | | double calc( double base, double exponent); |
215 | | }}} |
| 337 | |
| 338 | To declare a string in a variable, you need to use strcpy, so |
| 339 | {{{ |
| 340 | #!C |
| 341 | name = "Me"; /* Illegal */ |
| 342 | strcpy (name, "Me"); /* Legal */ |
| 343 | }}} |
| 344 | |
| 345 | When you assign a single character you need to enclose it in single-quotes ', if you want to assign a string (with the end-of-string (NULL) char included), you need to use double-quotes ". |
| 346 | |
| 347 | |
| 348 | A good way to remove the newline value from variables (when you use a input-line entry system) is by simply set the end-of-string (NULL) value to the newline place, like: |
| 349 | {{{ |
| 350 | #!C |
| 351 | fgets(first, sizeof(first), stdin); |
| 352 | first[strlen(first)-1] = '\0'; |
| 353 | }}} |
| 354 | Remember that a string contains first a newline (if the input has included a newline) and all the strings finishes by the '\0' (NULL) character |
| 355 | |
| 356 | The '''break''' statement is for exit from a ''loop'', and the '''continue''' statement is for (re)start the loop again (continue from the start) |
| 357 | |
| 358 | The '''if''' statement is ''true'' when the value is ''non-zero'', zero means ''no data'' or ''null'', so that means false. If you need to check if a value is zero you can simply do: |
| 359 | {{{ |
| 360 | #!C |
| 361 | if (var == 0) |
| 362 | }}} |
| 363 | ,,Maybe this sounds strange by doing it this way but if ''var'' is equal to 0, then the result of the '''()''' is 1 (true), if you don't understand why is 1 or how this works, you need to start reading a new book of C again...,, |
| 364 | |
| 365 | |
| 366 | |
| 367 | |
| 368 | |
| 369 | |
| 370 | |