mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-04-26 15:13:56 +00:00
[c/en] Fix typos and linting issues
Signed-off-by: Azeem Sajid <azeem.sajid@gmail.com>
This commit is contained in:
parent
5a91556483
commit
044e4b9ee9
78
c.md
78
c.md
@ -11,6 +11,7 @@ contributors:
|
||||
- ["Joshua Li", "https://github.com/JoshuaRLi"]
|
||||
- ["Dragos B. Chirila", "https://github.com/dchirila"]
|
||||
- ["Heitor P. de Bittencourt", "https://github.com/heitorPB/"]
|
||||
- ["Azeem Sajid", "https://github.com/iamazeem"]
|
||||
---
|
||||
|
||||
Ah, C. Still **the** language of modern high-performance computing.
|
||||
@ -53,7 +54,7 @@ enum days {SUN = 1, MON, TUE, WED = 99, THU, FRI, SAT};
|
||||
// libraries for the headers.
|
||||
// For your own headers, use double quotes instead of angle brackets, and
|
||||
// provide the path:
|
||||
#include "my_header.h" // local file
|
||||
#include "my_header.h" // local file
|
||||
#include "../my_lib/my_lib_header.h" //relative path
|
||||
|
||||
// Declare function signatures in advance in a .h file, or at the top of
|
||||
@ -85,8 +86,7 @@ int main(void) {
|
||||
// argc being the number of arguments - your program's name counts as 1
|
||||
// argv is an array of character arrays - containing the arguments themselves
|
||||
// argv[0] = name of your program, argv[1] = first argument, etc.
|
||||
int main (int argc, char** argv)
|
||||
{
|
||||
int main (int argc, char** argv) {
|
||||
// print output using printf, for "print formatted"
|
||||
// %d is an integer, \n is a newline
|
||||
printf("%d\n", 0); // => Prints 0
|
||||
@ -563,8 +563,7 @@ int main (int argc, char** argv)
|
||||
// Function declaration syntax:
|
||||
// <return type> <function name>(<args>)
|
||||
|
||||
int add_two_ints(int x1, int x2)
|
||||
{
|
||||
int add_two_ints(int x1, int x2) {
|
||||
return x1 + x2; // Use return to return a value
|
||||
}
|
||||
|
||||
@ -581,8 +580,7 @@ Example: in-place string reversal
|
||||
*/
|
||||
|
||||
// A void function returns no value
|
||||
void str_reverse(char *str_in)
|
||||
{
|
||||
void str_reverse(char *str_in) {
|
||||
char tmp;
|
||||
size_t ii = 0;
|
||||
size_t len = strlen(str_in); // `strlen()` is part of the c standard library
|
||||
@ -607,11 +605,10 @@ printf("%s\n", c); // => ".tset a si sihT"
|
||||
as we can return only one variable
|
||||
to change values of more than one variables we use call by reference
|
||||
*/
|
||||
void swapTwoNumbers(int *a, int *b)
|
||||
{
|
||||
int temp = *a;
|
||||
*a = *b;
|
||||
*b = temp;
|
||||
void swapTwoNumbers(int *a, int *b) {
|
||||
int temp = *a;
|
||||
*a = *b;
|
||||
*b = temp;
|
||||
}
|
||||
/*
|
||||
int first = 10;
|
||||
@ -627,17 +624,16 @@ printf("first: %d\nsecond: %d\n", first, second);
|
||||
// you would like to return multiple values, then the caller must pass in the
|
||||
// variables where they would like the returned values to go. These variables must
|
||||
// be passed in as pointers such that the function can modify them.
|
||||
int return_multiple( int *array_of_3, int *ret1, int *ret2, int *ret3)
|
||||
{
|
||||
if(array_of_3 == NULL)
|
||||
return 0; //return error code (false)
|
||||
int return_multiple( int *array_of_3, int *ret1, int *ret2, int *ret3) {
|
||||
if (array_of_3 == NULL)
|
||||
return 0; //return error code (false)
|
||||
|
||||
//de-reference the pointer so we modify its value
|
||||
*ret1 = array_of_3[0];
|
||||
*ret2 = array_of_3[1];
|
||||
*ret3 = array_of_3[2];
|
||||
//de-reference the pointer so we modify its value
|
||||
*ret1 = array_of_3[0];
|
||||
*ret2 = array_of_3[1];
|
||||
*ret3 = array_of_3[2];
|
||||
|
||||
return 1; //return error code (true)
|
||||
return 1; //return error code (true)
|
||||
}
|
||||
|
||||
/*
|
||||
@ -650,10 +646,10 @@ array in C.
|
||||
// Size must be passed!
|
||||
// Otherwise, this function has no way of knowing how big the array is.
|
||||
void printIntArray(int *arr, size_t size) {
|
||||
int i;
|
||||
for (i = 0; i < size; i++) {
|
||||
printf("arr[%d] is: %d\n", i, arr[i]);
|
||||
}
|
||||
int i;
|
||||
for (i = 0; i < size; i++) {
|
||||
printf("arr[%d] is: %d\n", i, arr[i]);
|
||||
}
|
||||
}
|
||||
/*
|
||||
int my_arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
|
||||
@ -703,8 +699,7 @@ struct rectangle {
|
||||
// due to potential padding between the structure members (this is for alignment
|
||||
// reasons). [1]
|
||||
|
||||
void function_1()
|
||||
{
|
||||
void function_1() {
|
||||
struct rectangle my_rec = { 1, 2 }; // Fields can be initialized immediately
|
||||
|
||||
// Access struct members with .
|
||||
@ -724,8 +719,7 @@ void function_1()
|
||||
// You can apply a typedef to a struct for convenience
|
||||
typedef struct rectangle rect;
|
||||
|
||||
int area(rect r)
|
||||
{
|
||||
int area(rect r) {
|
||||
return r.width * r.height;
|
||||
}
|
||||
|
||||
@ -741,8 +735,7 @@ struct rectangle r;
|
||||
|
||||
// if you have large structs, you can pass them "by pointer" to avoid copying
|
||||
// the whole struct:
|
||||
int areaptr(const rect *r)
|
||||
{
|
||||
int areaptr(const rect *r) {
|
||||
return r->width * r->height;
|
||||
}
|
||||
|
||||
@ -848,8 +841,8 @@ source files and can simplify code and definitions by separating them into
|
||||
separate files.
|
||||
|
||||
Header files are syntactically similar to C source files but reside in ".h"
|
||||
files. They can be included in your C source file by using the precompiler
|
||||
command #include "example.h", given that example.h exists in the same directory
|
||||
files. They can be included in your C source file by using the preprocessor
|
||||
directive #include "example.h", given that example.h exists in the same directory
|
||||
as the C file.
|
||||
*/
|
||||
|
||||
@ -867,7 +860,7 @@ as the C file.
|
||||
/* and used in files that include this header file. */
|
||||
#define EXAMPLE_NAME "Dennis Ritchie"
|
||||
|
||||
/* Function macros can also be defined. */
|
||||
/* Function macros can also be defined. */
|
||||
#define ADD(a, b) ((a) + (b))
|
||||
|
||||
/* Notice the parenthesis surrounding the arguments -- this is important to */
|
||||
@ -876,8 +869,7 @@ as the C file.
|
||||
/* incorrect result) */
|
||||
|
||||
/* Structs and typedefs can be used for consistency between files. */
|
||||
typedef struct Node
|
||||
{
|
||||
typedef struct Node {
|
||||
int val;
|
||||
struct Node *next;
|
||||
} Node;
|
||||
@ -894,20 +886,24 @@ Node createLinkedList(int *vals, int len);
|
||||
/* file. Excessive includes or definitions should also not be contained in */
|
||||
/* a header file but instead put into separate headers or a C file. */
|
||||
|
||||
#endif /* End of the if precompiler directive. */
|
||||
#endif /* End of the if preprocessor directive. */
|
||||
```
|
||||
|
||||
## Further Reading
|
||||
|
||||
Best to find yourself a copy of [K&R, aka "The C Programming Language"](https://en.wikipedia.org/wiki/The_C_Programming_Language). It is _the_ book about C, written by Dennis Ritchie, the creator of C, and Brian Kernighan. Be careful, though - it's ancient and it contains some
|
||||
inaccuracies (well, ideas that are not considered good anymore) or now-changed practices.
|
||||
Best to find yourself a copy of
|
||||
[K&R, aka "The C Programming Language"](https://en.wikipedia.org/wiki/The_C_Programming_Language).
|
||||
It is _the_ book about C, written by Dennis Ritchie, the creator of C, and Brian
|
||||
Kernighan. Be careful, though - it's ancient and it contains some inaccuracies
|
||||
(well, ideas that are not considered good anymore) or now-changed practices.
|
||||
|
||||
Another good resource is [Learn C The Hard Way](http://learncodethehardway.org/c/) (not free).
|
||||
|
||||
If you have a question, read the [compl.lang.c Frequently Asked Questions](http://c-faq.com).
|
||||
|
||||
It's very important to use proper spacing, indentation and to be consistent with your coding style in general.
|
||||
Readable code is better than clever code and fast code. For a good, sane coding style to adopt, see the
|
||||
It's very important to use proper spacing, indentation and to be consistent with
|
||||
your coding style in general. Readable code is better than clever code and fast
|
||||
code. For a good, sane coding style to adopt, see the
|
||||
[Linux kernel coding style](https://www.kernel.org/doc/Documentation/process/coding-style.rst).
|
||||
|
||||
[1] [Why isn't sizeof for a struct equal to the sum of sizeof of each member?](https://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member)
|
||||
|
Loading…
Reference in New Issue
Block a user