C Programming - Refresher - Part IV

1,808 views

Published on

C programming refresher from Embedded point of view. Fourth part talks about pre-processing

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,808
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
321
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

C Programming - Refresher - Part IV

  1. 1. Embedded C – Part IV Pre-processing & User defined data types Team Emertxe
  2. 2. Preprocessors
  3. 3. Preprocessor: what ? ● Preprocessor is a powerful tool with raw power ● Preprocessor is often provided as a separate tool with the C compilers ● Preprocessor is a program that processes the code before it passes through the compiler
  4. 4. Preprocessor: Functionalities ● Inclusion of header files ● Macro expansion ● Conditional compilation ● Removing comments from the source code ● Processing of trigraph sequence.
  5. 5. Preprocessor: Built-in Defines __FILE__ : Represents the current source file name in which it appears. __LINE__ : Represents the current line number during the preprocessing in the source file. __DATE__ : Represents the current date during the preprocessing. __TIME__ : Represents the current time at that point of preprocessing. __STDC__ : This constant is defined to be true if the compiler conforms to ANSI/ISO C standard. __func__ : Represents the current function name in which it appears
  6. 6. Preprocessor: Built-in Defines Example Output
  7. 7. Preprocessor: Directives ● #include ● #define ● #undef ● #ifdef, #ifndef, #else, #endif ● #error ● #line ● #pragma ● Preprocessing directives are lines in your program that start with `#'. ● The `#' is followed by an identier that is the directive name. For example, #include <stdio.h>
  8. 8. Directive: #include Copy of a specified file included in place of the directive #include <filename> ● Searches standard library for file ● Use for standard library files #include "filename" ● Searches current directory, then standard library ● Use for user-defined files Used for: ● Programs with multiple source files to be compiled together Header file – has common declarations and definitions (classes, structures, function prototypes)
  9. 9. Directive: #define PI is a Macro ● This is used to create symbolic constants and macros ● When program is preprocessed, all occurrences of symbolic constant replaced with replacement text #define identifier replacement-textSyntax Example #define PI 3.14159
  10. 10. Macros with Arguments ● Operation defined in #define ● A macro without arguments is treated like a symbolic constant ● A macro with arguments has its arguments substituted for replacement text, when the macro is expanded ● Performs a text substitution – no data type checking Example #define CIRCLE_AREA( x ) ( PI * ( x ) * ( x ) ) Would cause area = CIRCLE_AREA( 4 ); To become area = ( 3.14159 * ( 4 ) * ( 4 ) );
  11. 11. Macros with Arguments DIY 1. Write a macro to find max of two given nos. 2. Write a macro to set nth bit of given character.
  12. 12. Directive:#undefine, #ifdef, #ifndef, #else, #endif #include<stdio.h> #define ABC 25 #ifdef ABC #undef ABC #define ABC 50 #else #define ABC 100 #endif int main() { printf("%d",ABC); return 0; }
  13. 13. Directive: #error Syntax #error tokens ● Tokens are sequences of characters separated by spaces "Error cannot process" has 3 tokens ● Displays a message including the specified tokens as an error message ● Stops preprocessing and prevents program compilation
  14. 14. Directive: #error Output ?
  15. 15. Directive: #line ● Renumbers subsequent code lines, starting with integer value ● File name can be included ● #line 100 "myFile.c" ● Lines are numbered from 100 beginning with next source code file ● Compiler messages will think that the error occurred in "myfile.C" ● Makes errors more meaningful ● Line numbers do not appear in source file
  16. 16. Preprocessor Operators # (stringization operator) – Causes a replacement text token to be converted to a string surrounded by quotes – The statement #define HELLO( x ) printf( “Hello, ” #x “n” ); would cause HELLO( John ) to become printf( “Hello, ” “John” “n” ); Strings separated by whitespace are concatenated when using printf
  17. 17. Preprocessor Operators ## (concatenation operator) ● Concatenates two tokens ● The statement #define TOKENCONCAT( x, y ) x ## y would cause TOKENCONCAT( O, K ) to become OK
  18. 18. Preprocessor Operators Example
  19. 19. Advantages & Disadvantages Macros are not type-checked Examples: int k = max_macro(i, j); /* works with int */ float max_float = max_macro(10.0, 20.0); /* also works with float constants */ int k = max_function(i, j); /* works with int */ float max_float = max_function (10.0, 20.0); /* does not work - you can pass only integral values */
  20. 20. Advantages & Disadvantages Macros have side effects during textual replacement whereas functions does not have Examples: int k = max_macro (i++, j); /* we are in trouble as i++ is evaluated twice */ /* int k = (i++ > j) ? i++ : j */ int k = max_function (i++, j); /* no problem, as it is not expanded, but a call to max_function is made */ Macros might result in faster code as textual replacement is done and no function call overhead is involved.
  21. 21. User Defined Datatypes
  22. 22. Structures
  23. 23. Structures: What What ? ● It is user defined data type. ● It is used to group together different types of variables under the same name. Example To create the student record, which consist of ✔ Name ✔ Roll number ✔ Age ✔ Marks etc...
  24. 24. Structures: why Why ? ● It helps to construct a complex data type in more meaningful manner. ● Organising the data in a better & efficient way. Arrays & Structures Arrays Structures Collection of similar data types Collections of different data types
  25. 25. Structures: Declaration Declaration Example DIY: Declare the structure called date, which contains the memebers day, month, year
  26. 26. Structures: Declaration of variables Declaration of structures variables can be done in two ways ● With structure declaration ● Using structure tag With structure declaration Using structure tag Declaring the structure variable reserves the space in memory
  27. 27. Structures: Initialization of variables The number, order, type of these variables should be same as in the structure template With structure declaration Using structure tags
  28. 28. Structures: Initialization of variables Members of the structures cannot be initialize while defining the structure Invalid Initialization
  29. 29. Structures: Partial Initialization Example
  30. 30. Structures: Accessing the members Format for accessing the members variable.member Example s1.name s1.age s1.roll_num Dot( . ) operator is also called as period or membership operator
  31. 31. Structures: Accessing the members Format for accessing the members variable.member Example s1.name s1.age s1.roll_num Dot( . ) operator is also called as period or membership operator
  32. 32. Structures: Assignment of structure variables We can assign values of a structure variable to another structure variable, if both variables are of the same structure type. Example
  33. 33. Structures: Storage Allocation & Padding Let us consider an example, ch num Padded bytes Total : 8 bytes sizeof() operator can be used to find the total size of this structure 4 bytes
  34. 34. Structures: Array of structures All the structures of an array are stored in consecutive memory location Example: S [ 0 ] S [ 1 ] S [ 2 ] name age roll_ num marks name age roll_num marks name age roll_num marks Kenneth 25 43 67.25 John 24 35 76.50 Richie 26 36 80.00 Total : 32 * 3 = 96 bytes of memory
  35. 35. Structures: Nested structures Structures within structure Example Accessing the members within structure var1.var2.member1 Example: dob.t.day;
  36. 36. Structures: Pointers to structures Example Defining the pointer Accessing the members thru' ptr struct student *sptr = &s1; pointer -> member; sptr->name, sptr->age Use -> operator to access the members using pointers syntax Example
  37. 37. Structures: Functions & structures Passing structure members as Arguments Calling function Called function
  38. 38. Structures: Functions & structures Passing structure variables as Arguments Calling function Called function
  39. 39. Structures: Functions & structures Passing pointers to structures as Arguments Calling function Called function
  40. 40. Structures: Functions & structures Returning structure variable from function Calling function Called function
  41. 41. Structures: Functions & structures Returning a pointer to structure from function Calling function Called function
  42. 42. Structures: Self referential structures A structure that contains pointers to structures of its own type. Syntax: Example: struct tag { datatype member1; datatype member2; : : struct tag *ptr1; struct tag *ptr2; }; More details will be dealt in Data structures
  43. 43. Unions
  44. 44. Unions: Introduction ● User defined data type ● The syntax used for declaration of a union, declaration of variables and accessing the members are all similar to that of structures, except the keyword 'union' intead of 'struct' ● The main difference between union & structures is the way the memory is allocated for the members. ● In structures, each member has its own memory, whereas in the union members share the same memory locations. ● Compiler allocates sufficient memory to hold the largest member in the union.
  45. 45. Unions: Examples ● Example to compare the memory allocation for the members of the unions & structures. structures unions sizeof(struct sample) = 12 bytes sizeof(union sample) = 4 bytes Since highest data type among the members is 'float'
  46. 46. Unions: Union inside structure Example This structure has three members, 1. Name 2. Roll number 3. Union member performance Union will take only one value at a time, either a percent rounded of to whole number or gpa
  47. 47. typedefs
  48. 48. typedefs: Introduction ● The purpose of typedef is to form complex types from more-basic machine types and assign simpler names to such combinations. ● They are most often used when a standard declaration is cumbersome, potentially confusing, or likely to vary from one implementation to another. ● Under C convention (such as in the C standard library or POSIX), types declared with typedef end with '_t' (e.g., size_t, time_t). Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types.
  49. 49. typedefs: Examples Syntax typedef data_type new_name; Identifier Existing data type Keyword Example typdef unsigned int long ul_t; Now, ul_t type can be used to declare the variables of the type unsigned int long.
  50. 50. Typedefs & pointers Examples typedef int* iptr; Now, iptr is synonym for the int * or pointer to int. iptr p, q; // p, q are of type int* iptr *p; // Here, p is declared as pointer to pointer to int
  51. 51. Typedefs & arrays Examples typedef int intarr [ 10 ]; Now, intarr is synonym for the integer array of size 10. intarr a; Above example is equivalent to int a [ 10 ]; intarr a [ 5 ]; Above example is equivalent to int a [ 5][ 10 ];
  52. 52. enums
  53. 53. Enums: Introduction ● Set of named integer constants Syntax: enum tag { member1, member2, member3,...}; Example: enum month { Jan, Feb, Mar, Apr, May, June}; ● Internally the compiler treats these enumerators as integer constant. ● Enumerators are automatically assigned integer values begining from 0,1,2,... ● In the above example, Jan-0, Feb-1, Mar-2,...
  54. 54. Bit-fields
  55. 55. Bit-fields Introduction ● A bit field is set up with a structure declaration that labels each field and determines its width. Syntax: Example:
  56. 56. Stay connected About us: Emertxe is India’s one of the top IT finishing schools & self learning kits provider. Our primary focus is on Embedded with diversification focus on Java, Oracle and Android areas Branch Office: Corporate Headquarters: Emertxe Information Technologies, Emertxe Information Technologies, No-1, 9th Cross, 5th Main, 83, Farah Towers, 1st Floor, Jayamahal Extension, MG Road, Bangalore, Karnataka 560046 Bangalore, Karnataka - 560001 T: +91 809 555 7333 (M), +91 80 41289576 (L) E: training@emertxe.com https://www.facebook.com/Emertxe https://twitter.com/EmertxeTweet https://www.slideshare.net/EmertxeSlides
  57. 57. THANK YOU

×