technicalsymposium

Free Advertisement Procedure and Free Email /Whatsapp Updates

Free Email Alerts-Subscribe Below


Enter your Email ID here:

Note:Login & Check Your Email Inbox and Activate Confirmation Link

Technical Round Materials-C-Free Download

Technical Round Materials-C-Free Download

Q #1) What are the key features in C programming language?

  • Portability – Platform independent language.
  • Modularity – Possibility to break down large programs into small modules.
  • Flexibility – The possibility to a programmer to control the language.
  • Speed – C comes with support for system programming and hence it is compiling and executes with high speed when comparing with other high-level languages.
  • Extensibility – Possibility to add new features by the programmer.

Q #2) What are the basic data types associated with C?

  • Int – Represent number (integer)
  • Float – Number with a fraction part.
  • Double – Double-precision floating point value
  • Char – Single character
  • Void – Special purpose type without any value.

Q #3) What is the description for syntax errors?

Ans) The mistakes when creating a program called syntax errors. Misspelled commands or incorrect case commands, an incorrect number of parameters when called a method /function, data type mismatches can identify as common examples for syntax errors.

Q #4) What is the process to create increment and decrement stamen in C?

Ans) There are two possible methods to perform this task.

1) Use increment (++) and decrement (-) operator.

Example When x=4, x++ returns 5 and x- returns 3.

2) Use conventional + or – sign.

When x=4, use x+1 to get 5 and x-1 to get 3.

Q #5) What are reserved words with a programming language?

Ans) The words that are part of the slandered C language library are called reserved words. Those reserved words have special meaning and it is not possible to use them for any activity other than its intended functionality.

Example void, return, int.

Q #6) What is the explanation for the dangling pointer in C?

Ans) When there is a pointer with pointing to a memory address of any variable, but after some time the variable was deleted from the memory location while keeping the pointer pointing to that location.

Q #7) Describe static function with its usage?

Ans) A function, which has a function definition prefixed with a static keyword is defined as a static function. The static function should call within the same source code.

Q #8) What is the difference between abs() and fabs() functions?

Ans) Both functions are to retrieve absolute value. abs() is for integer values and fabs() is for floating type numbers. Prototype for abs() is under the library file < stdlib.h > and fabs() is under < math.h >.

Q #9) Describe Wild Pointers in C?

Ans) Uninitialized pointers in the C code are known as Wild Pointers. These are a point to some arbitrary memory location and can cause bad program behavior or program crash.

Q #10) What is the difference between ++a and a++?

Ans) ‘++a” is called prefixed increment and the increment will happen first on a variable. ‘a++’ is called postfix increment and the increment happens after the value of a variable used for the operations.

Q #11) Describe the difference between = and == symbols in C programming?

Ans) ‘==’ is the comparison operator which is use to compare the value or expression on the left-hand side with the value or expression on the right-hand side.

‘=’ is the assignment operator which is use to assign the value of the right-hand side to the variable on the left-hand side.

Q #12) What is the explanation for prototype function in C?

Prototype function is a declaration of a function with the following information to the compiler.

  • Name of the function.
  • The return type of the function.
  • Parameters list of the function.

In this example Name of the function is Sum, the return type is integer data type and it accepts two integer parameters.

Q #13) What is the explanation for cyclic nature of data types in C?

Ans) Some of the data types in C have special characteristic nature when a developer assign value beyond the range of the data type. There will be no any compiler error and the value change according to a cyclic order. This is called as cyclic nature and Char, int, long int data types have this property. Further float, double and long double data types do not have this property.

This is called as cyclic nature and Char, int, long int data types have this property. Further float, double and long double data types do not have this property.

Q #14) Describe the header file and its usage in C programming?

Ans) The file contains the definitions and prototypes of the functions being used in the program are called a header file. It is also known as a library file.

Example– The header file contains commands like printf and scanf is the stdio.h.

Q #15) There is a practice in coding to keep some code blocks in comment symbols than delete it when debugging. How this affect when debugging?

Ans) This concept called as commenting out and is the way to isolate some part of the code which scans possible reason for the error. Also, this concept helps to save time because if the code is not the reason for the issue it can simply uncomment.

Q #16) What are the general description for loop statement and available loop types in C?

Ans) A statement that allows executing statement or group of statements in repeated way is defined as a loop. Following diagram explains

There are 4 types of a loop statement in C.

  • While loop
  • For Loop
  • Do…While Loop
  • Nested Loop

Q #17) What is a nested loop?

Ans) A loop running within another loop is referred as a nested loop. The first loop is called Outer loop and inside the loop is called Inner loop. Inner loop executes the number of times define an outer loop.

Q #18) What is the general form of function in C?

Ans) Function definition in C contains four main sections.

  • Return Type -> Data type of the return value of the function.
  • Function Name -> The name of the function and it is important to have a meaningful name that describes the activity of the function.
  • Parameters -> The input values for the function that need to use perform the required action.
  • Function Body -> Collection of statement that needs to perform the required action.

Q #19) What is a pointer on a pointer in C programming language?

Ans) A pointer variable that contains the address of another pointer variable is called pointer on a pointer. This concept de-refers twice to point to the data held by a pointer variable.

In this example **y returns value of the variable a.

Q #20) What are the valid places to have keyword “Break”?

Ans) The purpose of the Break keyword is to bring the control out of the code block which is executing. It can appear only in Looping or switch statements.

Q #21) What is the behavioral difference when include header file in double quotes (“”) and angular braces (<>)?

Ans) When Header file include within double quotes (“”), compiler search first in the working directory for the particular header file. If not found then in the built in the include path. But when Header file include within angular braces (<>), the compiler only search in the working directory for the particular header file.

Q #22) What is a sequential access file?

Ans) In general programs store data into files and retrieve existing data from files. With the sequential access file such data saved in a sequential pattern. When retrieving data from such files each data need to read one by one until required information find.

Q #23) What is the method to save data in stack data structure type?

Ans) Data is stored in Stack data structure type using First in Last out (FILO) mechanism. Only top of the stack is accessible at a given instance. Storing mechanism is referred as a PUSH and retrieve is referred as a POP.

Q #24) What is the significance of C program algorithms?

Ans) The algorithm needs to create first and it contains step by step guidelines on how the solution should create. Also, it contains the steps to consider and the required calculations/operations within the program.

Q #29) Is it possible to use curly brackets ({}) to enclose single line code in C program?

Ans) Yes, it is working without any error. Some programmers like to use this to organize the code. But the main purpose of curly brackets is to group several lines of codes.

Q #30) Describe the modifier in C?

Ans) Modifier is a prefix to the basic data type which is used to indicate the modification for storage space allocation to a variable.

Example– In 32-bit processor storage space for int data type is 4.When we use it with modifier the storage space change as follows.

  • Long int -> Storage space is 8 bit
  • Short int -> Storage space is 2 bit

Q #31) What are the modifiers available in C programming language?

Ans) There are 5 modifiers available in C programming language as follows.

  • Short
  • Long
  • Signed
  • Unsigned
  • long long

Q #32) What is the process to generate random numbers in C programming language?

Ans) The command rand() is available to use for this purpose. The function returns any integer number beginning from zero(0). Following sample code demonstrate the use of rand().

Q #33) Describe newline escape sequence with a sample program?

Ans) New line escape sequence is represented by \n. This indicates the point that new line need to start to the compiler and the output creates accordingly. Following sample program demonstrate the use of newline escape sequence.

Q #34) Is that possible to store 32768 in an int data type variable?

Ans) Int data type only capable of storing values between – 32768 to 32767.To store 32768 a modifier needs to use with int data type. Long Int can use and also if there is no any negative values unsigned int is also possible to use.

Q #35) Is there any possibility to create customized header file with C programming language?

Ans) It is possible and easy to create a new header file. Create a file with function prototypes that needs to use inside the program. Include the file in ‘#include’ section from its name.

Q #36) Describe dynamic data structure in C programming language?

Ans) Dynamic data structure is more efficient to the memory. The memory access occurs as needed by the program.

Q #37) Is that possible to add pointers to each other?

Ans) There is no possibility to add pointers together. Since pointer contains address details there is no way to retrieve the value from this operation.

Q #38) What is indirection?

Ans) If you have defined a pointer to a variable or any memory object, there is no direct reference to the value of the variable. This is called indirect reference. But when we declare a variable it has a direct reference to the value.

Q #39) What are the ways to a null pointer can use in C programming language?

Ans) Null pointers are possible to use in three ways.

  • As an error value.
  • As a sentinel value.
  • To terminate indirection in the recursive data structure.

Q #40) What is the explanation for modular programming?

Ans) The process of dividing the main program into executable subsection is called module programming. This concept promotes the reusability.

What are different techniques for making hash function?

Techniques for making hash function.
Truncation Method
This is the simplest method for computing address from a key.In this method we take only a part of the key as address.
Midsquare Method
In this method the key is squared and some digits from the middle of this square are taken as address.
Folding Method
In this technique, the key is divided into different part where the length of each part is same as that of the required address, except possibly the last part.
Division Method (Modulo-Division)
In Modulo-Division method the key is divided by the table size and the remainder is taken as the address of the hash table.
–>Let the table size is n then
H (k) =k mod n

2. What are the issues that hamper the efficiency in sorting a file?

The issues are:

  • Length of time required by the programmer in coding a particular sorting program.
  • Amount of machine time necessary for running the particular program.
  • The amount of space necessary for the particular program.

3. What is the use of volatile keyword?

The modifier ‘volatile’ tells the compiler that a variable’s value may be changed in ways not explicitly specified by the program. For example, a global variable’s address may be passed to the operating system’s clock routine and used to hold the system time.
In this situation, the contents of the variable are altered without any explicit assignment statements in the program.

This is important because most C compilers automatically optimize certain expressions by assuming that a variable’s content is unchanging if it does not occur on the left side of an assignment statement. Thus, it may not be reexamined each time it is referenced. Also, some compilers change the order of evaluation of an expression during the compilation process. The volatile modifier prevents these changes.

Download C & Data Structure Interview questions asked by top MNCs in 2018 ?

Top of Form

Bottom of Form

Top of Form

Bottom of Form

4. Write a C program without using semicolon to print ‘Hello world’

void main(){

if(printf("Hello world")){

}

}

5. What are differences between sizeof operator and strlen function?

sizeof is keyword of C that can find size of a String constant including null character, but strlen is function which has been defined string.h and can find number of characters in a string excluding null character.

#include

void main(){

int a,b;

a=strlen("cquestionbank");

b=sizeof("cquestionbank");

printf("%d %d",a,b);

getch();

}

6. What is the difference between

sprintf(…) writes data to the character array. The C library function sprintf () is used to store formatted data as a string. You can also say the sprintf () function is used to create strings as output using formatted data. The syntax of the sprintf () function is as follows:

int sprintf (char *string, const char *form, … );

Here, the *string will stand for the name of the array that will store the output obtained by working on the formatted data. The *form parameter will show the format of the output.
printf(…) writes data to the standard output device. The printf function is just a useful function from the standard library of functions that are accessible.

The behavior of printf is defined in the ANSI standard. If the compiler that you’re using conforms to this standard then all the features and properties should be available to you.

7. When does the compiler not implicitly generate the address of the first element of an array?

The compiler does not implicitly generate the address of the first element of an array whenever an array name appears:
– as an operand of the sizeof operator
– as an operand of & operator
– as a string literal initialize for a character array

8. Is using exit() the same as using return?

No, the exit() function is used to exit your program and return() controls the operating system.

9. What is an lvalue?

An lvalue is an expression to which a value can be assigned. The lvalue expression is located on the left side of an assignment statement whereas an rvalue is located on the right side of an assignment statement.
Each assignment statement must have an lvalue and an rvalue. The lvalue expression must refer a storable variable in memory. It cannot be a constant.

10. What is the difference between goto, longjmp() and setjmp()?

  • A goto statement implements a local jump of program execution whereas the longjmp() and setjmp() functions implement a nonlocal or far jump of the program execution.
  • Generally, a jump in any execution should be avoided because it is not considered good programming practice to use such statements as goto and longjmp in your program.
  • A goto statement simply bypasses code in your program and jumps to a predefined position. To use the goto statement, you give it a labeled position to jump to. This predefined position must be within the same function. You cannot implement goto between functions.
    However, when your program calls setjmp(), the current state of your program is saved in a structure of type jmp_buf. Later, your program can call the longjmp() function to restore the program’s state as it was when you called setjmp().Unlike the goto statement, the longjmp() and setjmp() functions do not need to be implemented in the same function.
    There is a major drawback of using these functions: your program, when restored to its previously saved state, it will lose its references to any dynamically allocated memory between the longjmp() and the setjmp(). This means you will waste memory for every malloc() or calloc() you have implemented between your longjmp() and setjmp(), and your program will be inefficient.
    It is highly recommended that you avoid using functions such as longjmp() and setjmp() because they, like the goto statement, are quite often an indication of poor programming practice.

11. What is XOR linked list?

XOR linked list is a Memory Efficient Doubly Linked List. An ordinary Doubly Linked List requires space for two address fields to store the addresses of previous and next nodes. A memory efficient version of Doubly Linked List can be created using only one space for address field with every node. This memory efficient Doubly Linked List is called XOR Linked List or Memory Efficient as the list uses bitwise XOR operation to save space for one address.
In the XOR linked list, instead of storing actual memory addresses, each node stores the XOR of addresses of previous and next nodes.
XOR List Representation:
Let us call the address variable in XOR representation npx (XOR of next and previous)

Node A:

npx = 0 XOR add(B) // bitwise XOR of zero and address of B

Node B:

npx = add(A) XOR add(C) // bitwise XOR of address of A and address of C

Node C:

npx = add(B) XOR add(D) // bitwise XOR of address of B and address of D

Node D:

npx = add(C) XOR 0 // bitwise XOR of address of C and 0

12. What is ‘trie’ in data structure?

Trie is efficient information retrieval data structure. Using trie, search complexities can be brought to optimal limit (key length). If we store keys in binary search tree, a well balanced BST will need time proportional to M * log N, where M is maximum string length and N is number of keys in tree.
• Using trie, we can search the key in O(M) time. However, the penalty is on trie storage requirements.
• Each node of trie consists of multiple branches. Each branch represents a possible character of keys.
• We need to mark the last node of every key as leaf node.
• A trie node field value will be used to distinguish the node as leaf node (there are other uses of the value field).
• A simple structure to represent nodes of English alphabet can be as follows:

struct trie_node

{

int value; /* Used to mark leaf nodes */

trie_node_t *children[ALPHABET_SIZE];

};

13. What do you understand by splay tree?

Splay tree is a self-balancing Binary Search Tree (BST). The main idea of splay tree is to bring the recently accessed item to root of the tree. This makes the recently searched item to be accessible in O (1) time if accessed again. The idea is to use locality of reference (In a typical application: 80% of the access are to 20% of the items).
Imagine a situation, where we have millions or billions of keys and only few of them are accessed frequently, which is very likely in many practical applications.
All splay tree operations run in O(log n) time on average, where n is the number of entries in the tree. Any single operation can take Theta(n) time in the worst case.

14. What is Treap?

Treap is a Balanced Binary Search Tree, but not guaranteed to have height as O(Log n). The idea is to use Randomization and Binary Heap property to maintain balance with high probability. The expected time complexity of search, insert and delete is O(Log n).
–>Each node of Treap maintains two values.

1. Key follows standard BST ordering (left is smaller and right is greater)

2. Priority Randomly assigned value that follows Max-Heap property.

15. How to implement LRU caching scheme? What data structures should be used?

We are given total possible page numbers that can be referred. We are also given cache (or memory) size (Number of page frames that cache can hold at a time). The LRU caching scheme is to remove the least recently used frame when the cache is full and a new page is referenced which is not there in cache.
–>We use two data structures to implement an LRU Cache.

1. A Queue: which is implemented using a doubly linked list. The maximum size of the queue will be equal to the total number of frames available (cache size).
The most recently used pages will be near front end and least recently pages will be near rear end.

2. A Hash: with page number as key and address of the corresponding queue node as value. When a page is referenced, the required page may be in the memory. If it is in the memory, we need to detach the node of the list and bring it to the front of the queue.
If the required page is not in the memory, we bring that in memory. In simple words, we add a new node to the front of the queue and update the corresponding node address in the hash. If the queue is full, i.e. all the frames are full, we remove a node from the rear of queue, and add the new node to the front of queue.

16. Suppose, there are two linked lists: L1 and L2 (of same lengths) that intersect at a particular node N1, which is a common endpoint to all other nodes. What are the possibilities to find N1?

Linear solution is possible. Have two pointers say P1 pointing to the first node of L1 and P2 to that of L2. Traverse through both the lists. If P1 reaches L1’s last node, point it to the first node of L2 and continue traversing.
Do the same thing for P2 when it reaches L2’s last node. (By doing this, we are balancing the difference in the length between the linked lists. The shorter one will get over soon and by redirecting to longer list’s head, it will traverse the extra nodes also). Finally, they will meet at the Intersection node.

17. Given two keys K1 & K2, write an algorithm to print all the elements between them with K1<=K2 in a BST.

  • Linear solution is possible without using any extra space.
  • Perform an inorder traversal.
  • Once you find K1, print it and continue traversal now.
  • Print all other traversed elements until you reach K2.

18. How many stacks are required to implement a Queue.

Two stacks are required to implement a Queue.

  • For Enqueue: Take two stacks S1 and S2 and perform push on S1.
  • For Dequeue: If S2 is empty, pop all the elements from S1 and push it to S2. The last element you popped from S1 is an element to be dequeued. If S2 is not empty, then pop the top element in it.

1.Write a c program to print Hello world without using any semicolon .
2.Swap two variables without using third variable .
3.What is dangling pointer in c?
4.What are merits and demerits of array in c?
5. Do you know memory representation of int a = 7 ?
6.What is and why array in c?
7.Why we use do-while loop in c? Also tell any properties which you know?
8.What is the meaning of prototype of a function?
9.Write a c program to modify the constant variable in c?
10.What is pointer to a function?
11.Write a c program to find size of structure without using sizeof operator?

1. What is C language?

2. What are the features of C language?

3. What is the use of printf() and scanf() functions?

4. What is the use of static variable in C?

5. What is recursion in C?

6. What is a stack?

7. What is a sequential access file?

8. What is spaghetti programming?

9. What is the difference between the = symbol and == symbol?

10. What is a nested loop?

11. What is syntax error?

12. When is the “void” keyword used in a function?

13. What are compound statements?

14. How do you generate random numbers in C?

15. What is debugging?

16. Can the “if” function be used in comparing strings?

17. What are reserved words?

18. What is FIFO?

19. What are binary trees?

20. What is an endless loop?

21. What are actual arguments?

22. What are run-time errors?

23. What is output redirection?

24. What are control structures?

25. What are enumerated types?

26. What are multidimensional arrays?

27. What are structure types in C?

28. What are the different data types in C?

29. What are pointers?

30. What is gets() function?

31. What is NULL pointer in C?

32. What is dynamic memory allocation?

33. What is auto keyword in C?

34. What is token?

35. What is new line escape sequence?

36. What is typecasting?

37. What is infinite loop?

64) When would you use a pointer to a function?

Pointers to functions are interesting, when you pass them to other functions. A function that takes function pointers says, in effect, " Part of what I do can be customized. Give me a pointer to a function, and I'll call it when that part of the job needs to be done. That function can do its part for me. This is known as a callback ". It's used a lot in graphical user interface libraries, in which the style of a display is built into the library but the contents of the display are part of the application.

65) How to return two variables of different data type from a function?

struct STRUCTURE

{

int integerVar;

char characterVar;

};

STRUCTURE Function()

{

STRUCTURE x;

return (x);

}

66) What is the difference between far pointer and near pointer ?

Compilers for PC compatibles, use two types of pointers.

  • Near pointers are 16 bits long and can address a 64KB range. Far pointers are 32 bits long and can address a 1MB range. Near pointers operate within a 64KB segment. There's one segment for function addresses and one segment for data.
  • Far pointers have a 16-bit base (the segment address) and a 16-bit offset. The base is multiplied by 16, so a far pointer is effectively 20 bits long. For example, if a far pointer had a segment of 0x7000 and an offset of 0x1224, the pointer would refer to address 0x71224. A far pointer with a segment of 0x7122 and an offset of 0x0004 would refer to the same address.

67) When should a far pointer be used?

Sometimes, you can get away with using a small memory model in most of a given program. Somethings may not fit in your small data and code segments.

When that happens, you can use explicit far pointers and function declarations to get at the rest of memory. A far function can be outside the 64KB segment, most functions are shoehorned into for a small-code model. ( Often, libraries are declared explicitly far, so they'll work no matter what code model the program uses. )

A far pointer can refer to information outside the 64KB data segment. Typically, such pointers are used with farmalloc() and such, to separately manage a heap from the rest of the data.

68) Expand the following fragment of C code to make it more understandable ?

{char* x = *y ? *++*y : *++*z;}

Code can be rewritten as

char *x;

if (*y != NULL)

{

(*y)++;

x = *y;

}

else

{

(*z)++;

x = *z;

}

69) Write a C program to print a semicolon without using any semicolon in the whole program?

#include<stdio.h>

#define SEMICOLON 59

//59 is ASCII value of semicolon

void main()

{

if(printf("%c",SEMICOLON))

{

}

}

70) How can you determine the size of an allocated portion of memory?

You can't. free() can, but there's no way for a program to know the use of method free()

71) Add your code in the program so that the given code block print 'unknown' ?

<...Add your code...>

if(a>10) printf("greater");

else if(a<10) printf("lesser");

else if(a==10) printf("equal");

else printf("unknown");

#define a b++

main()

{

int b = 10;

if(a>10) printf("greater");

else if(a<10) printf("lesser");

else if(a==10) printf("equal");

else printf("unknown");

}

Explanation : After macro expansion the code will be like this :

if(b++>5) printf("greater"); //5>5 : fail

else if(b++<5) printf("lesser"); //6

72) Can math operations be performed on a void pointer?

No. Pointer addition and subtraction are based on advancing the pointer by a number of elements. By definition, if you have a void pointer, you don't know what it's pointing to, so you don't know the size of what it's pointing to. If you want pointer arithmetic to work on raw addresses, use character pointers.

73) How many parameters should a function have?

There is no fixed guideline or limit to the number of parameters your functions can have. However, it is considered bad programming style for your functions to contain an abnormally high (eight or more) number of parameters. The number of parameters a function has also directly affects the speed at which it is called - the more parameters, the slower the function call.

74) Is using exit() the same as using return?

No. The exit() function is used to exit your program and return control to the operating system. The return statement is used to return from a function and return control to the calling function. If you issue a return from the main() function, you are essentially returning control to the calling function, which is the operating system. In this case, the return statement and exit() function are similar.

75) Is it valid to address one element beyond the end of an array?

It's valid to address it, but not to see what's there. ( The really short answer is, "Yes, so don't worry about it.") With most compilers, if you say

int i, a[MAX], j;

Then either i or j is at the part of memory just after the last element of the array. The way to see whether i or j follows the array is to compare their addresses with that of the element following the array. The way to say this in C is that either

& i == & a[ MAX ]

is true or

& a[ MAX ] == & j

is true. This isn't guaranteed.

1) What is the difference between #include <file> and #include "file" ?

We use # include to include a file. The difference between two ways of file inclusion lies in the order in which preprocessor searches for the file specified. When the preprocessor encounters #include<file> statement, it looks for the file specified in the angled brackets in the default location (Path defined in INCLUDE environment variable of the system).

When # include followed by file name in double quotation marks is encountered by the preprocessor, it looks for the file in the current directory. If the file is not found in the current directory, it will look for the file in the default location.

2) Can #include handle other file formats than .h?

Yes. Irrespective of the file type, Preprocessor will do its job and will include any file like test.z.

3) What is a void pointer?

A void pointer is a special pointer type which can point to any data type without letting the compiler know. It helps to pass a pointer to some function of any type which can be decided at run time. In the following example input parameter a and b can be both integer and string.

Void PointerVoid(int type, void *a, void *b, void *c)

{

if(type == 1)/* int*/

*c = ((int) *a) + ((int)*b);

else /*string*/

sprintf((char*)c,”%s%s”,(char*)a,(char*b));

}

4) What is the value of NULL?

The value of NULL is 0 or (void*)0. Whenever NULL has to be compared with some variable or assigned to a variable, depending upon the type of that variable, the value of NULL will be decided.

5) Can the size of an array be declared at runtime?

No. The size of an array must be stated at the time of compilation. Alternate way is to use dynamic allocation by calloc or malloc.

6) what is the difference between malloc() and calloc()?

Calloc

Malloc

Allocates a region of memory large enough to hold "n” elements of "size" bytes each.

Allocates "size" bytes of memory.

Calloc initializes the whole memory with 0

Malloc does not change the existing memory. So it returns a memory chunk with garbage value.

7) What is the heap in memory?

The heap is where malloc(), calloc(), and realloc() get memory. The allocation of memory from the heap is much slower than the stack. But, the heap is much more flexible about memory allocation than the stack. Memory can be allocated and deallocated in any time and order. This heap memory isn't deallocated by itself, method free() has to be called in order to do so.

8) What will be the output of the following code snippet?

float num1 = 6 / 4;

float num2 = 6 / 4.0;

printf("6/4 == %f or %f\n", num1, num2);

Output will be : 6/4 == 1.000000 or 1. 500000. This is a case of operator promotion. The variable num1 is set to “6/4”. Because, both 3 and 4 are integers. So integer division is performed on them and the result is the integer 0. The variable num2 is set to “6/4.0”. Because 4.0 is a float, the number 6 is converted to a float as well, and the result will be floating value 1.5.

9) What happens if you free a pointer twice?

It is really dangerous to free the same memory twice. If the memory has not been reallocated in between, it will generate a “double free” error, since the memory location has already been freed.

10) How does free() method know about how much memory to release?

There's no concrete way. Most systems, keeps a track of each memory block as linked lists. When memory is allocated, all the blocks that are given to that particular call are put into a linked list and the size, block number and serial number are written in the head node. There is no assurance, though. But in some way or other, the system keeps track of each block to know the size of each allocated portion of the heap.

11) How to restrict a header file from including more than once?

In C, to avoid double inclusion, we use a include guard also known as macro guard. It is #ifndef - #endif pair. "ifndef" is an indication of “if not defined”.

#ifndef FAMILY_H

#define FAMILY_H

struct Example

{

int member;

};

#endif /* FAMILY _H */

12) How to print an address?

The best way is to use "%p" in printf() or fprintf. The “%p” will tell compiler to use the best type to use, while printing the address according to the environment, since the size of a pointer changes from system to system.

13) Enter the output of the program

#include <stdio.h>

enum day {sunday = 1,monday,tuesday,wednesday,thursday = 3,friday,saturday};

int main()

{

int i;

printf("%d %d %d %d %d %d %d", sunday, monday, tuesday,

wednesday, thursday, friday, saturday);

scanf("%d",&i);

return 0;

}

The answer is : 1 2 3 4 3 4 5

Explanation : The enum assigns the value with single increment. If a value is explicitly assigned to an element, it will just set that value to that element and start to increment from that assigned value for the following elements.

14) Explain recursive functions? Also explain the advantages and disadvantages of Recursive algorithms?

A recursive function is a function which calls itself. The advantages of recursive functions are:

  • A substitute for very complex iteration. For example, a recursive function is best to reduce the code size for Tower of Hanoi application.
  • Unnecessary calling of functions can be avoided.

The disadvantages of Recursive functions:

  • The exit point must be explicitly coded ,otherwise stack overflow may happen
  • A recursive function is often confusing. It is difficult to trace the logic of the function. Hence, it is difficult to debug a recursive function.

15) What are the standard predefined macros?

ANSI C has six predefined macro. They are

  • __FILE__ - Name of the current file
  • __LINE__ - Current line number
  • __TIME__ - Current time of compilation
  • __DATE__ - Current date of compilation
  • __cplusplus - If program compiled in C++ compiler
  • __STDC__ - If ANSI C is followed by the compiler strictly.

16) What is a pragma?

The #pragma preprocessor allows compiler to include or exclude compiler specific features. For example if there is a feature xxx_yyy then,

#pragma xxx_yyy(on)

Forces compiler to include the feature. Conversely, you can turn off it by the following lines:

#pragma xxx_yyy(off)

17) How to redefined macro with different value?

The #undef preprocessor can be used to reset a macro. For example,

#ifdef SAMPLE /* Checking if SAMPLE is defined */

#undef SAMPLE /* If so, then reset it */

#endif

#define SAMPLE 0 /* Then redefine with intended value */

18) What is an lvalue?

An lvalue is an expression to which a value can be assigned. The lvalue expression is the one which is located on the left side a statement, whereas an rvalue is located on the right side of a statement. Each assignment must have a valid lvalue and rvalue. The lvalue expression must refer to a storage where something can be stored. It can't be a constant.

19) How to assign one array to another?

You can't assign an array to other. Arrays are not lvalue, because they don't refer to one variable, rather a set of variables. So they can't be placed on the left hand side of an assignment statement. For example the following statement will generate compilation error.

int x[5], y[5];

x = y;

20) what is the order of operator precedence, left to right or right to left ?

None of them is standard. C does not always start evaluating left to right or right to left. Normally, function calls are done first, followed by complex expressions and then simple expressions. That is why it is best to use parenthesis in all expressions, without depending on precedence.

21) What is the difference between ++X and X++?

The ++ operator is called the incremental operator. When the operator is placed before, the variable is incremented by 1 before it is used in the statement. When the operator is placed after the variable, then the expression is evaluated first and then the variable is incremented by 1.

22) What happens when we use incremental operator in a pointer?

It depends upon the type of the pointer. It gets incremented by the size of the data type, the pointer is pointing to. For example

char p; p++; /* here p increments by 1*/

int p; p++;/* here p increments by 4(for 32 bit system)*/

23) What will be output of the following code snippet?

int num1=5;

int num2=5;

num1 =num1++ + num1--;

num2 =++num2 + --num2;

printf("num1=%d num2=%d",num1,num2);

Output will be num1=10 num2=10.

24) Can the sizeof operator be used to tell the size of an array passed to a function?

No. The sizeof() operator can't tell the size of an array, because it is actually a pointer to the data type of the array.

25) Can you change the value of an array tag?

No. An array tag can't be used as a storage, because it is not an Lvalue. It can be thought as a pointer to the datatype of the array which is constant and which can't be changed or assigned dynamically.

26) What is a stream? How many types of streams are in C?

A stream is a series of data bytes which serves the input and output needs of a program. Input and output from devices are generally connected to these streams which then appears as logical file descriptors to your program. In C, there are five such standard streams which need not be opened or closed explicitly.

Name

Description

Example

stdin

Standard Input

Keyboard

stdout

Standard Output

Screen

stderr

Standard Error

Screen

stdaux

Standard Auxiliary

COM1: port

stdprn

Standard Printer

LPT1: port

27) What are text and binary modes?

Streams can be classified into two types: text streams and binary streams. The text streams are interpreted as per the ASCII values starting from 0 to 255. Binary streams are raw bytes which C can't interpret, but application has to interpret it itself. Text modes are used to handle, generally text file where as binary modes can be used for all files. But they won't give you the content of a file, rather they will give you the file properties and content in raw binary format.

28) Which one to use, a stream function or a system calls?

Stream files are generally better to use, since they provide sufficient amount of buffer for read and write. That is why it is more efficient.

But in a multiuser environment, files can be shared among users. These shared files are secured with lock, where only one user will be able to write at a time. In this scenario, buffering will not be efficient, since the file content will change continuously and it will be slower.

So, normally it is good to use stream functions, but for shared files system calls are better.

29) What is the difference between a string copy (strcpy) and a memory copy (memcpy)?

Generally speaking, they both copy a number of bytes from a source pointer to a destination pointer. But the basic difference is that the strcpy() is specifically designed to copy strings, hence it stops copying after getting the first '\0'(NULL) character. But memcpy() is designed to work with all data types. So you need to specify the length of the data to be copied, starting from the source pointer.

30) How can I pad a string to a known length?

printf("%-20.20s", data[d]);

The "%-20.20s" argument tells the printf() function that you are printing a string and you want to force it to be 20 characters long. By default, the string is right justified, but by including the minus sign (-) before the first 20, you tell the printf() function to left-justify your string. This action forces the printf() function to pad the string with spaces to make it 20 characters long.

31) How can I convert a number to a string?

The following functions can be used to convert integers to strings:

Function Name

Purpose

itoa()

Integer value to a string.

ltoa()

Long integer value to a string.

Ultoa()

Unsigned long integer value to a string.

You can write your own functions too, because these functions are not that safe, as they don't check if the value given is NULL or not.

32) What does const keyword do?

The access modifier keyword “const” tells compiler that the value of this variable is not going to be changed after it is initialized. The compiler will enforce it throughout the lifetime of the variable.

33) char *p="SAMPLETEXT" , *q ="SAMPLETEXT"; Are these two pointers equal ? If yes , then explain ?

In C, strings(not array of characters) are immutable. This means that a string once created cannot be modified. Only flushing the buffer can remove it. Next point is, when a string is created it is stored in buffer. Next time, when a new string is created, it will check whether that string is present in buffer or not. If present, that address is assigned. Otherwise, new address stores the new string and this new address is assigned.

34) When should a type cast be used?

There are two main uses of type cast.

  • The first one is to convert some value of datatype A to a datatype B. Such as, if you type cast a float variable of value 1.25 to int, then it will be 1.
  • The second use is to cast any pointer type to and from void *, in order to use it in generic functions such as memory copy functions, where the execution is independent of the type of the pointer.

35) What is the difference between declaring a variable and defining a variable?

Declaration is done to tell compiler the data type of the variable, and it inherently meant that somewhere in this scope, this variable is defined or will be defined. And defining a variable means to allocate space for that variable and register it in the stack memory. For example:

extern int decl1; /* this is a declaration */

int def2; /* this is a definition */

36) Can static variables be declared in a header file?

You can't declare a static variable without definition ( this is because they are mutually exclusive storage classes). A static variable can be defined in a header file, but then every source file with in that scope will have their own copy of this variable, which is intended.

37) What is the benefit of using const for declaring constants over #define?

The basic difference between them is that, a const variable is a real variable which has a datatype and it exists at run time, and it can't be altered. But a macro is not a real variable, but it carries a constant value which replaces all the occurrences of that macro at the time of pre-processing.

38) What is a static function?

Static function is a special type of function whose scope is limited to the source file where the function is defined and can not be used other than that file. This feature helps you to hide some functions and to provide some standard interface or wrapper over that local function.

39) Should a function contain a return statement if it does not return a value?

In C, void functions does not return anything. So it is useless to put a return statement at the end of the function, where the control will any way return to the caller function. But, if you want to omit some portion of the function depending upon the scenario, then this return statement is perfect to avoid further execution of that void function.

40) How can you pass an array to a function by value?

An array can be passed to a function by value, by keeping a parameter with an array tag with empty square brackets(like []). From the caller function, just pass the array tag. For instance,

void func(int i[]) {..} /* parameter */

...

int k[10];

func(k); /* caller function */

41) Is it possible to execute code even after the program exits the main() function?

There is a standard C function named atexit() for this purpose that can be used to perform some operations when your program exiting. You can register some functions with atexit() to be executed at the time of termination. Here's an example:

#include <stdio.h>

#include <stdlib.h>

void _some_FUNC_(void);

int main(int argc, char** argv)

{

...

atexit(_some_FUNC_);

….

}

42) What does a function declared as PASCAL do differently?

In C, when some function is called, the parameters are put at the top of the stack. Now the order in which they are put is the order in which the parameters are parsed. Normally, the order is right to left. That is, the right most is parsed first and the left most parameter is parsed at last.

If you want to alter this paradigm, then you have to define the function with PASCAL as following:

int PASCAL pascal_func(int, char*, long);

Here, the left most parameter(int) will be parsed first, then char* and then long.

43) Why does PASCAL matter? Is there any benefit to using PASCAL functions?

The main reason behind using PASCAL is that, in the left-to-right parsing the efficiency of switching increases in C.

44) Is using exit() the same as using return?

No. They are not the same. Return statement returns control to the caller function, that is, it exits from the lowest level of the call stack. Where as, exit statement make the program returns to the system from where the application was started. So, exit always exits from the highest level of call stack. Eventually, if there is only one level of function call then they both do the same.

45) Point out the error in the program given below, if any ?

main()

{

int a=10,b;

a>= 5 ? b=100 : b=200;

printf("\n%d",b);

}

A value is required in function main(). The second assignment should be written in parenthesis as follows:

a>= 5 ? b=100 : (b=200);

46) Point out the error in the following program

main()

{

const int x;

x = 128;

printf("%d",x);

}

Variable x should have been initialized during declaration.

47) In C, what is the difference between a static variable and global variable?

A static variable ia declared outside of any function and it is accessible only to all the functions defined in the same file (as the static variable). In case of global variable, it can be accessed by any function (including the ones from different files).

48) Write a c program to print Hello world without using any semicolon.

void main()

{

if(printf("Hello world"))

{

}

}

Same way, while and switch statements can be used to achieve this.

49) Write a C program to swap two variables without using third variable ?

#include<stdio.h>

int main()

{

int a=5,b=10;

a=b+a;

b=a-b;

a=a-b;

printf("a= %d b= %d",a,b);

}

50) What is dangling pointer in c?

If any pointer is pointing at the memory location/address of any variable, but if the variable is deleted or does not exist in the current scope of code, while pointer is still pointing to that memory location, then the pointer is called dangling pointer. For example,

#include<stdio.h>

int *func();

int main()

{

int *ptr;

ptr=func();

printf("%d",*ptr);

return 0;

}

int * func()

{

int x=18;

return &x;

}

Output is Garbage value, since the variable x has been freed as soon as the function func() returned

51) What is wild pointer in c?

A pointer is known as wild pointer c, if it has not been initialized. For Example:

int main()

{

int *ptr;

printf("%u\n",ptr);

printf("%d",*ptr);

return 0;

}

Output: Any address, Garbage value.

Here ptr is wild pointer, because it has not been initialized. Wild pointer is not the same as NULL pointer. Because, NULL pointer doesn't point to any location, but a wild pointer points to a specific memory location but the memory may not be available for current application, which is very fatal.

52) What is the meaning of prototype of a function?

Declaration of function is known as prototype of a function. Prototype says the name, parameter list and return type of a function but not the definition, this is same as declaring some variable but not defining it. For example,

int printf(const char *, int/);

53) Write a c program to find size of structure without using sizeof operator?

struct XXX

{

int x;

float y;

char z;

};

int main()

{

struct XXX *ptr=(struct XXX *)0;

ptr++;

printf("Size of structure is: %d",*ptr);

return 0;

}

54) What is size of void pointer?

Size of all pointers are same in C, regardless of their type because pointers variable holds a memory location. And for a given system, this size is constant. The type of pointer is used to know the size of the data that the pointer is pointer is pointing to.

55) What will be output of following program?

#include<stdio.h>

int main()

{

int a = 260;

char *ptr;

ptr =( char *)&a;

printf("%d ",*ptr);

return 0;

}

(A) 2 (B) 260 (C) 4 (D) Compilation error (E) None of above

Answer is B. 260 will take two byte memory space to reside and the bytes will be 1 and 4. Binary value of 260 is 00000001 00000100 (In 16 bit). So, ptr is only pointing to first 8 bit whose decimal value is 4.

56) What will be the output?

#include "stdio.h"

int main()

{

char arr[100];

printf("%d", scanf("%s", arr));

/* Say the input is “hello” */

return 1;

}

The scanf returns the number of inputs it has successfully read, so the output will be 1.

57) Guess the output.

#include <stdio.h>

int main()

{

printf(6 + “Hello World”);

return 0;

}

The printf is a library function which takes a char pointer as input. Here the pointer in incremented by 6, so the pointer will advance from pointing 'H' to 'W'. So the output will be “World”.

59) Guess the output?

#include <stdio.h>

int main()

{

printf("%c ", 6[“Hello World”]);

return 0;

}

In C, X[5] and 5[X] are the same. Here, 6[“Hello World”] will return the 6th element of the array “Hello World”, that is 'W'.

60) Guess the output?

#include <stdio.h>

main()

{

char *p = 0;

*p = 'a';

printf("value in pointer p is %c\n", *p);

}

a) It will print a b) It will print 0 c) Compile time error d) Run time error

Answer is d, runtime error. Because the pointer p is declared, but not the variable it is pointing to. In the statement, while assigning 'a', it will try to write in the address 0 and will get runtime error.

61) Which of the following is true

(A) gets() can read a string with newline chacters but a normal scanf() with %s can not.
(B) gets() can read a string with spaces but a normal scanf() with %s can not.
(C) gets() can always replace scanf() without any additional code.
(D) None of the above

Ans: (B)

62) What is the output of this C Program?

#include<stdio.h>

int main()

{

printf("%d", printf("%d", 1234));

return 0;

}

Answer is 12344. 1234 will be printed by the second printf and it will return 4 as printf returns the number of letters it printed.

63) How do you use a pointer to a function?

The hardest part about using a pointer-to-function is declaring it. Consider an example. You want to create a pointer, pf, that points to the strcmp() function. The strcmp() function is declared as shown below

int strcmp( const char *, const char * )

To set up “pf” to point to the strcmp() function, you want a declaration that looks just like the strcmp() function's declaration, but that has *pf rather than strcmp:

int (*pf)( const char *, const char * );

Notice that you need to put parentheses around *pf.

What is volatile keyword?
The volatile keyword is intended to prevent the compiler from applying any optimizations on objects that can change in ways that cannot be determined by the compiler.

Can a variable be both const and volatile?
yes, the const means that the variable cannot be assigned a new value. The value can be changed by other code or pointer. For example the following program works fine.

int main(void)

{

const volatile int local = 10;

int *ptr = (int*) &local;

printf("Initial value of local : %d \n", local);

*ptr = 100;

printf("Modified value of local: %d \n", local);

return 0;

}

What are main characteristics of C language?
C is a procedural language. The main features of C language include low-level access to memory, simple set of keywords, and clean style. These features make it suitable for system programming like operating system or compiler development.

What is difference between i++ and ++i?
1) The expression ‘i++’ returns the old value and then increments i. The expression ++i increments the value and returns new value.
2) Precedence of postfix ++ is higher than that of prefix ++.
3) Associativity of postfix ++ is left to right and associativity of prefix ++ is right to left.
4) In C++, ++i can be used as l-value, but i++ cannot be. In C, they both cannot be used as l-value.

What is l-value?
l-value or location value refers to an expression that can be used on left side of assignment operator. For example in expression “a = 3”, a is l-value and 3 is r-value.
l-values are of two types:
“nonmodifiable l-value” represent a l-value that can not be modified. const variables are “nonmodifiable l-value”.
“modifiable l-value” represent a l-value that can be modified.

What is a pointer on pointer?

It’s a pointer variable which can hold the address of another pointer variable. It de-refers twice to point to the data held by the designated pointer variable.

Eg: int x = 5, *p=&x, **q=&p;

Therefore ‘x’ can be accessed by **q.

Distinguish between malloc() & calloc() memory allocation.

Both allocates memory from heap area/dynamic memory. By default calloc fills the allocated memory with 0’s.

What is keyword auto for?

By default every local variable of the function is automatic (auto). In the below function both the variables ‘i’ and ‘j’ are automatic variables.

void f() {

int i;

auto int j;

}

NOTE - A global variable can’t be an automatic variable.

What are the valid places for the keyword break to appear.

Break can appear only with in the looping control and switch statement. The purpose of the break is to bring the control out from the said blocks.

Explain the syntax for for loop.

for(expression-1;expression-2;expression-3) {

//set of statements

}

When control reaches for expression-1 is executed first. Then following expression-2, and if expression-2 evaluates to non-zero ‘set of statements’ and expression-3 is executed, follows expression-2.

What is difference between including the header file with-in angular braces < > and double quotes “ “

If a header file is included with in < > then the compiler searches for the particular header file only with in the built in include path. If a header file is included with in “ “, then the compiler searches for the particular header file first in the current working directory, if not found then in the built in include path.

How a negative integer is stored.

Get the two’s compliment of the same positive integer. Eg: 1011 (-5)

Step-1 - One’s compliment of 5 : 1010

Step-2 - Add 1 to above, giving 1011, which is -5

What is a static variable?

A static local variables retains its value between the function call and the default value is 0. The following function will print 1 2 3 if called thrice.

void f() {

static int i;

++i;

printf(“%d “,i);

}

If a global variable is static then its visibility is limited to the same source code.

What is a NULL pointer?

A pointer pointing to nothing is called so. Eg: char *p=NULL;

What is the purpose of extern storage specifier?

Used to resolve the scope of global symbol.

Eg:

main() {

extern int i;

Printf(“%d”,i);

}

int i = 20;

Explain the purpose of the function sprintf().

Prints the formatted output onto the character array.

What is the meaning of base address of the array?

The starting address of the array is called as the base address of the array.

When should we use the register storage specifier?

If a variable is used most frequently then it should be declared using register storage specifier, then possibly the compiler gives CPU register for its storage to speed up the look up of the variable.

S++ or S = S+1, which can be recommended to increment the value by 1 and why?

S++, as it is single machine instruction (INC) internally.

What is a dangling pointer?

A pointer initially holding valid address, but later the held address is released or freed. Then such a pointer is called as dangling pointer.

What is the purpose of the keyword typedef?

It is used to alias the existing type. Also used to simplify the complex declaration of the type.

What is lvalue and rvalue?

The expression appearing on right side of the assignment operator is called as rvalue. Rvalue is assigned to lvalue, which appears on left side of the assignment operator. The lvalue should designate to a variable not a constant.

What is the difference between actual and formal parameters?

The parameters sent to the function at calling end are called as actual parameters while at the receiving of the function definition called as formal parameters.

Can a program be compiled without main() function?

Yes, it can be but cannot be executed, as the execution requires main() function definition.

What is the advantage of declaring void pointers?

When we do not know what type of the memory address the pointer variable is going to hold, then we declare a void pointer for such.

Where an automatic variable is stored?

Every local variable by default being an auto variable is stored in stack memory.

What is a nested structure?

A structure containing an element of another structure as its member is referred so.

What is the difference between variable declaration and variable definition?

Declaration associates type to the variable whereas definition gives the value to the variable.

What is a self-referential structure?

A structure containing the same structure pointer variable as its element is called as self-referential structure.

Does a built-in header file contains built-in function definition?

No, the header file only declares function. The definition is in library which is linked by the linker.

Explain modular programming.

Dividing the program in to sub programs (modules/function) to achieve the given task is modular approach. More generic functions definition gives the ability to re-use the functions, such as built-in library functions.

What is a token?

A C program consists of various tokens and a token is either a keyword, an identifier, a constant, a string literal, or a symbol.

What is a preprocessor?

Preprocessor is a directive to the compiler to perform certain things before the actual compilation process begins.

Explain the use of %i format specifier w.r.t scanf().

Can be used to input integer in all the supported format.

How can you print a \ (backslash) using any of the printf() family of functions.

Escape it using \ (backslash).

Does a break is required by default case in switch statement?

Yes, if it is not appearing as the last case and if we do not want the control to flow to the following case after default if any.

When to user -> (arrow) operator.

If the structure/union variable is a pointer variable, to access structure/union elements the arrow operator is used.

What are bit fields?

We can create integer structure members of differing size apart from non-standard size using bit fields. Such structure size is automatically adjusted with the multiple of integer size of the machine.

What are command line arguments?

The arguments which we pass to the main() function while executing the program are called as command line arguments. The parameters are always strings held in the second argument (below in args) of the function which is array of character pointers. First argument represents the count of arguments (below in count) and updated automatically by operating system.

main( int count, char *args[]) {

}

What are the different ways of passing parameters to the functions? Which to use when?

  • Call by value - We send only values to the function as parameters. We choose this if we do not want the actual parameters to be modified with formal parameters but just used.
  • Call by reference - We send address of the actual parameters instead of values. We choose this if we do want the actual parameters to be modified with formal parameters.

What is the purpose of built-in stricmp() function.

It compares two strings by ignoring the case.

Describe the file opening mode “w+”.

Opens a file both for reading and writing. If a file is not existing it creates one, else if the file is existing it will be over written.

Where the address of operator (&) cannot be used?

It cannot be used on constants.

It cannot be used on variable which are declared using register storage class.

Is FILE a built-in data type?

No, it is a structure defined in stdio.h.

What is reminder for 5.0 % 2?

Error, It is invalid that either of the operands for the modulus operator (%) is a real number.

How many operators are there under the category of ternary operators?

There is only one operator and is conditional operator (? : ).

Which key word is used to perform unconditional branching?

goto

What is a pointer to a function? Give the general syntax for the same.

A pointer holding the reference of the function is called pointer to a function. In general it is declared as follows.

T (*fun_ptr) (T1,T2…); Where T is any date type.

Once fun_ptr refers a function the same can be invoked using the pointer as follows.

fun_ptr();

[Or]

(*fun_ptr)();

Explain the use of comma operator (,).

Comma operator can be used to separate two or more expressions.

Eg: printf(“hi”) , printf(“Hello”);

What is a NULL statement?

A null statement is no executable statements such as ; (semicolon).

Eg: int count = 0;

while( ++count<=10 ) ;

Above does nothing 10 times.

What is a static function?

A function’s definition prefixed with static keyword is called as a static function. You would make a function static if it should be called only within the same source code.

Which compiler switch to be used for compiling the programs using math library with gcc compiler?

Opiton –lm to be used as > gcc –lm <file.c>

Which operator is used to continue the definition of macro in the next line?

Backward slash (\) is used.

E.g. #define MESSAGE "Hi, \

Welcome to C"

Which operator is used to receive the variable number of arguments for a function?

Ellipses (…) is used for the same. A general function definition looks as follows

void f(int k,…) {

}

What is the problem with the following coding snippet?

char *s1 = "hello",*s2 = "welcome";

strcat(s1,s2);

s1 points to a string constant and cannot be altered.

Which built-in library function can be used to re-size the allocated dynamic memory?

realloc() .

Define an array.

Array is collection of similar data items under a common name.

What are enumerations?

Enumerations are list of integer constants with name. Enumerators are defined with the keyword enum.

Which built-in function can be used to move the file pointer internally?

fseek()

What is a variable?

A variable is the name storage.

Who designed C programming language?

Dennis M Ritchie.

C is successor of which programming language?

B

What is the full form of ANSI?

American National Standards Institute.

Which operator can be used to determine the size of a data type or variable?

sizeof

Can we assign a float variable to a long integer variable?

Yes, with loss of fractional part.

Is 068 a valid octal number?

No, it contains invalid octal digits.

What it the return value of a relational operator if it returns any?

Return a value 1 if the relation between the expressions is true, else 0.

How does bitwise operator XOR works.

If both the corresponding bits are same it gives 0 else 1.

What is an infinite loop?

A loop executing repeatedly as the loop-expression always evaluates to true such as

while(0 == 0) {

}

Can variables belonging to different scope have same name? If so show an example.

Variables belonging to different scope can have same name as in the following code snippet.

int var;

void f() {

int var;

}

main() {

int var;

}

What is the default value of local and global variables?

Local variables get garbage value and global variables get a value 0 by default.

Can a pointer access the array?

Pointer by holding array’s base address can access the array.

What are valid operations on pointers?

The only two permitted operations on pointers are

  • Comparision ii) Addition/Substraction (excluding void pointers)

What is a string length?

It is the count of character excluding the ‘\0’ character.

What is the built-in function to append one string to another?

strcat() form the header string.h

Which operator can be used to access union elements if union variable is a pointer variable?

Arrow (->) operator.

Explain about ‘stdin’.

stdin in a pointer variable which is by default opened for standard input device.

Name a function which can be used to close the file stream.

fclose().

What is the purpose of #undef preprocessor?

It be used to undefine an existing macro definition.

Define a structure.

A structure can be defined of collection of heterogeneous data items.

Name the predefined macro which be used to determine whether your compiler is ANSI standard or not? What is typecasting?

Typecasting is a way to convert a variable/constant from one type to another type.

What is recursion?

Function calling itself is called as recursion.

Which function can be used to release the dynamic allocated memory?

free().

What is the first string in the argument vector w.r.t command line arguments?

Program name.

How can we determine whether a file is successfully opened or not using fopen() function?

On failure fopen() returns NULL, otherwise opened successfully.

What is the output file generated by the linker.

Linker generates the executable file.

What is the maximum length of an identifier?

Ideally it is 32 characters and also implementation dependent.

What is the default function call method?

By default the functions are called by value.

Functions must and should be declared. Comment on this.

Function declaration is optional if the same is invoked after its definition.

When the macros gets expanded?

At the time of preprocessing.

Can a function return multiple values to the caller using return reserved word?

No, only one value can be returned to the caller.

What is a constant pointer?

A pointer which is not allowed to be altered to hold another address after it is holding one.

To make pointer generic for which date type it need to be declared?

Void

Can the structure variable be initialized as soon as it is declared?

Yes, w.r.t the order of structure elements only.

Is there a way to compare two structure variables?

There is no such. We need to compare element by element of the structure variables.

Which built-in library function can be used to match a patter from the string?

Strstr()

What is difference between far and near pointers?

In first place they are non-standard keywords. A near pointer can access only 2^15 memory space and far pointer can access 2^32 memory space. Both the keywords are implementation specific and are non-standard.

Can we nest comments in a C code?

No, we cannot.

Which control loop is recommended if you have to execute set of statements for fixed number of times?

for – Loop.

What is a constant?

A value which cannot be modified is called so. Such variables are qualified with the keyword const.

Can we use just the tag name of structures to declare the variables for the same?

No, we need to use both the keyword ‘struct’ and the tag name.

Can the main() function left empty?

Yes, possibly the program doing nothing.

Can one function call another?

Yes, any user defined function can call any function.

Apart from Dennis Ritchie who the other person who contributed in design of C language.

Brain Kernighan

Print text within double quotes (” “).
This may seem easy but beginners may get puzzled while printing text within double quotes.

// CPP program to print double quotes

#include<iostream>

int main()

{

std::cout << "\"geeksforgeeks\"";

return 0;

}

To check if two numbers are equal without using arithmetic operators or comparison operators.
The simplest solution for this is using Bitwise XOR operator (^). We know that, for two equal numbers XOR operator returns 0. We will use this trick to solve this problem.

// C program to check if two numbers are equal

// without using arithmetic operators or

// comparison operators

#include<stdio.h>

int main()

{

int x = 10;

int y = 10;

if ( !(x ^ y) )

printf(" x is equal to y ");

else

printf(" x is not equal to y ");

return 0;

}

Print all natural numbers upto N without using semi-colon.
We use the idea of recursively calling main function.

// CPP program to print all natural numbers upto

// N without using semi-colon

#include<iostream>

using namespace std;

int N = 10;

int main()

{

static int x = 1;

if (cout << x << " " && x++ < N && main())

{ }

return 0;

}

Program to find Maximum and minimum of two numbers without using any loop or condition.
The simplest trick is-

// CPP program to find maximum and minimum of

// two numbers without using loop and any

// condition.

#include<bits/stdc++.h>

int main ()

{

int a = 15, b = 20;

printf("max = %d\n", ((a + b) + abs(a - b)) / 2);

printf("min = %d", ((a + b) - abs(a - b)) / 2);

return 0;

}

Print the maximum value of an unsigned int using One’s Compliment (~) Operator in C.
Here is a trick to find maximum value of an unsigned int using one’s compliment operator:

// C program to print maximum value of

// unsigned int.

#include<stdio.h>

int main()

{

unsigned int max;

max = 0;

max = ~max;

printf("Max value : %u ", max);

return 0;

}

? ? To find sum of two integers without using ‘+’ operator.
This is a very easy mathematics trick.
We know that a + b = – (-a-b). So this will work as a trick for us.

// CPP program to print sum of two integers

// withtout +

#include<iostream>

using namespace std;

int main()

{

int a = 5;

int b = 5;

int sum = -( -a-b );

cout << sum;

return 0;

}

? Output:

10

? Program to run both if and else condition.

// CPP program to run both if and else.

#include<iostream>

using namespace std;

int main()

{

if (!(cout << "geeks"))

cout <<" geeks ";

else

cout << "forgeeks ";

return 0;

}

? Output:

geeksforgeeks

? Program to divide an integer by 4 without using ‘/’ operator.
One of the most efficient way to divide an integer by 4 is to use left shift operator (“>>”).

// CPP program to divide a number by 4

// without using '/'

#include<iostream>

using namespace std;

int main()

{

int n = 4;

n = n >> 2;

cout << n;

return 0;

}

? Output:

1

? Program to check endianness of the computer.

// C program to find if machine is little

// endian or big endian.

#include <stdio.h>

int main()

{

unsigned int n = 1;

char *c = (char*)&n;

if (*c)

printf("LITTLE ENDIAN");

else

printf("BIG ENDIAN");

return 0;

}

) How do you construct an increment statement or decrement statement in C?

There are actually two ways you can do this. One is to use the increment operator ++ and decrement operator –. For example, the statement “x++” means to increment the value of x by 1. Likewise, the statement “x –” means to decrement the value of x by 1. Another way of writing increment statements is to use the conventional + plus sign or – minus sign. In the case of “x++”, another way to write it is “x = x +1”.

2) What is the difference between Call by Value and Call by Reference?

When using Call by Value, you are sending the value of a variable as parameter to a function, whereas Call by Reference sends the address of the variable. Also, under Call by Value, the value in the parameter is not affected by whatever operation that takes place, while in the case of Call by Reference, values can be affected by the process within the function.

3) Some coders debug their programs by placing comment symbols on some codes instead of deleting it. How does this aid in debugging?

Placing comment symbols /* */ around a code, also referred to as “commenting out”, is a way of isolating some codes that you think maybe causing errors in the program, without deleting the code. The idea is that if the code is in fact correct, you simply remove the comment symbols and continue on. It also saves you time and effort on having to retype the codes if you have deleted it in the first place.

4) What is the equivalent code of the following statement in WHILE LOOP format?

C

1

2

3

for (a=1; a&lt;=100; a++)

printf (&quot;%d\n&quot;, a * a);

Answer:

C

1

2

3

4

5

6

7

8

9

a=1;

while (a&lt;=100) {

printf (&quot;%d\n&quot;, a * a);

a++;

}

5) What is a stack?

A stack is one form of a data structure. Data is stored in stacks using the FILO (First In Last Out) approach. At any particular instance, only the top of the stack is accessible, which means that in order to retrieve data that is stored inside the stack, those on the upper part should be extracted first. Storing data in a stack is also referred to as a PUSH, while data retrieval is referred to as a POP.

6) What is a sequential access file?

When writing programs that will store and retrieve data in a file, it is possible to designate that file into different forms. A sequential access file is such that data are saved in sequential order: one data is placed into the file after another. To access a particular data within the sequential access file, data has to be read one data at a time, until the right one is reached.

7) What is variable initialization and why is it important?

This refers to the process wherein a variable is assigned an initial value before it is used in the program. Without initialization, a variable would have an unknown value, which can lead to unpredictable outputs when used in computations or other operations.

8 What is spaghetti programming?


Spaghetti programming refers to codes that tend to get tangled and overlapped throughout the program. This unstructured approach to coding is usually attributed to lack of experience on the part of the programmer. Spaghetti programing makes a program complex and analyzing the codes difficult, and so must be avoided as much as possible.

9) Differentiate Source Codes from Object Codes

Source codes are codes that were written by the programmer. It is made up of the commands and other English-like keywords that are supposed to instruct the computer what to do. However, computers would not be able to understand source codes. Therefore, source codes are compiled using a compiler. The resulting outputs are object codes, which are in a format that can be understood by the computer processor. In C programming, source codes are saved with the file extension .C, while object codes are saved with the file extension .OBJ

10) In C programming, how do you insert quote characters (‘ and “) into the output screen?

This is a common problem for beginners because quotes are normally part of a printf statement. To insert the quote character as part of the output, use the format specifiers \’ (for single quote), and \” (for double quote).

11) What is the use of a ‘\0’ character?

It is referred to as a terminating null character, and is used primarily to show the end of a string value.

12) What is the difference between the = symbol and == symbol?

The = symbol is often used in mathematical operations. It is used to assign a value to a given variable. On the other hand, the == symbol, also known as “equal to” or “equivalent to”, is a relational operator that is used to compare two values.

13) What is the modulus operator?

The modulus operator outputs the remainder of a division. It makes use of the percentage (%) symbol. For example: 10 % 3 = 1, meaning when you divide 10 by 3, the remainder is 1.

14) What is a nested loop?

A nested loop is a loop that runs within another loop. Put it in another sense, you have an inner loop that is inside an outer loop. In this scenario, the inner loop is performed a number of times as specified by the outer loop. For each turn on the outer loop, the inner loop is first performed.

15) Which of the following operators is incorrect and why? ( >=, <=, <>, ==)

<> is incorrect. While this operator is correctly interpreted as “not equal to” in writing conditional statements, it is not the proper operator to be used in C programming. Instead, the operator != must be used to indicate “not equal to” condition.

16) Compare and contrast compilers from interpreters.

Compilers and interpreters often deal with how program codes are executed. Interpreters execute program codes one line at a time, while compilers take the program as a whole and convert it into object code, before executing it. The key difference here is that in the case of interpreters, a program may encounter syntax errors in the middle of execution, and will stop from there. On the other hand, compilers check the syntax of the entire program and will only proceed to execution when no syntax errors are found.

17) How do you declare a variable that will hold string values?

The char keyword can only hold 1 character value at a time. By creating an array of characters, you can store string values in it. Example: “char MyName[50]; ” declares a string variable named MyName that can hold a maximum of 50 characters.


18) Can the curly brackets { } be used to enclose a single line of code?

While curly brackets are mainly used to group several lines of codes, it will still work without error if you used it for a single line. Some programmers prefer this method as a way of organizing codes to make it look clearer, especially in conditional statements.

19) What are header files and what are its uses in C programming?

Header files are also known as library files. They contain two essential things: the definitions and prototypes of functions being used in a program. Simply put, commands that you use in C programming are actually functions that are defined from within each header files. Each header file contains a set of functions. For example: stdio.h is a header file that contains definition and prototypes of commands like printf and scanf.

20) What is syntax error?

Syntax errors are associated with mistakes in the use of a programming language. It maybe a command that was misspelled or a command that must was entered in lowercase mode but was instead entered with an upper case character. A misplaced symbol, or lack of symbol, somewhere within a line of code can also lead to syntax error.

21) What are variables and it what way is it different from constants?

Variables and constants may at first look similar in a sense that both are identifiers made up of one character or more characters (letters, numbers and a few allowable symbols). Both will also hold a particular value. Values held by a variable can be altered throughout the program, and can be used in most operations and computations. Constants are given values at one time only, placed at the beginning of a program. This value is not altered in the program. For example, you can assigned a constant named PI and give it a value 3.1415 . You can then use it as PI in the program, instead of having to write 3.1415 each time you need it.

22) How do you access the values within an array?

Arrays contain a number of elements, depending on the size you gave it during variable declaration. Each element is assigned a number from 0 to number of elements-1. To assign or retrieve the value of a particular element, refer to the element number. For example: if you have a declaration that says “intscores[5];”, then you have 5 accessible elements, namely: scores[0], scores[1], scores[2], scores[3] and scores[4].

23) Can I use “int” data type to store the value 32768? Why?

No. “int” data type is capable of storing values from -32768 to 32767. To store 32768, you can use “long int” instead. You can also use “unsigned int”, assuming you don’t intend to store negative values.

24) Can two or more operators such as \n and \t be combined in a single line of program code?

Yes, it’s perfectly valid to combine operators, especially if the need arises. For example: you can have a code like ” printf (“Hello\n\n\’World\'”) ” to output the text “Hello” on the first line and “World” enclosed in single quotes to appear on the next two lines.

25) Why is it that not all header files are declared in every C program?

The choice of declaring a header file at the top of each C program would depend on what commands/functions you will be using in that program. Since each header file contains different function definitions and prototype, you would be using only those header files that would contain the functions you will need. Declaring all header files in every program would only increase the overall file size and load of the program, and is not considered a good programming style.

26) When is the “void” keyword used in a function?

When declaring functions, you will decide whether that function would be returning a value or not. If that function will not return a value, such as when the purpose of a function is to display some outputs on the screen, then “void” is to be placed at the leftmost part of the function header. When a return value is expected after the function execution, the data type of the return value is placed instead of “void”.

27) What are compound statements?

Compound statements are made up of two or more program statements that are executed together. This usually occurs while handling conditions wherein a series of statements are executed when a TRUE or FALSE is evaluated. Compound statements can also be executed within a loop. Curly brackets { } are placed before and after compound statements.

28) What is the significance of an algorithm to C programming?

Before a program can be written, an algorithm has to be created first. An algorithm provides a step by step procedure on how a solution can be derived. It also acts as a blueprint on how a program will start and end, including what process and computations are involved.

29) What is the advantage of an array over individual variables?

When storing multiple related data, it is a good idea to use arrays. This is because arrays are named using only 1 word followed by an element number. For example: to store the 10 test results of 1 student, one can use 10 different variable names (grade1, grade2, grade3… grade10). With arrays, only 1 name is used, the rest are accessible through the index name (grade[0], grade[1], grade[2]… grade[9]).

30) Write a loop statement that will show the following output:

1

12

123

1234

12345

Answer:

C

1

2

3

4

5

6

7

8

9

for (a=1; a&lt;=5; i++) {

for (b=1; b&lt;=a; b++)

printf(&quot;%d&quot;,b);

printf(&quot;\n&quot;);

}

31) What is wrong in this statement? scanf(“%d”,whatnumber);

An ampersand & symbol must be placed before the variable name whatnumber. Placing & means whatever integer value is entered by the user is stored at the “address” of the variable name. This is a common mistake for programmers, often leading to logical errors.

32) How do you generate random numbers in C?

Random numbers are generated in C using the rand() command. For example: anyNum = rand() will generate any integer number beginning from 0, assuming that anyNum is a variable of type integer.

33) What could possibly be the problem if a valid function name such as tolower() is being reported by the C compiler as undefined?

The most probable reason behind this error is that the header file for that function was not indicated at the top of the program. Header files contain the definition and prototype for functions and commands used in a C program. In the case of “tolower()”, the code “#include <ctype.h>” must be present at the beginning of the program.

34) What are comments and how do you insert it in a C program?

Comments are a great way to put some remarks or description in a program. It can serves as a reminder on what the program is all about, or a description on why a certain code or function was placed there in the first place. Comments begin with /* and ended by */ characters. Comments can be a single line, or can even span several lines. It can be placed anywhere in the program.

35) What is debugging?

Debugging is the process of identifying errors within a program. During program compilation, errors that are found will stop the program from executing completely. At this state, the programmer would look into the possible portions where the error occurred. Debugging ensures the removal of errors, and plays an important role in ensuring that the expected program output is met.

36) What does the && operator do in a program code?

The && is also referred to as AND operator. When using this operator, all conditions specified must be TRUE before the next action can be performed. If you have 10 conditions and all but 1 fails to evaluate as TRUE, the entire condition statement is already evaluated as FALSE.

37) In C programming, what command or code can be used to determine if a number of odd or even?

There is no single command or function in C that can check if a number is odd or even. However, this can be accomplished by dividing that number by 2, then checking the remainder. If the remainder is 0, then that number is even, otherwise, it is odd. You can write it in code as:

C

1

2

3

4

5

6

7

if (num % 2 == 0)

printf(&quot;EVEN&quot;);

else

printf(&quot;ODD&quot;);

38) What does the format %10.2 mean when included in a printf statement?

This format is used for two things: to set the number of spaces allotted for the output number and to set the number of decimal places. The number before the decimal point is for the allotted space, in this case it would allot 10 spaces for the output number. If the number of space occupied by the output number is less than 10, addition space characters will be inserted before the actual output number. The number after the decimal point sets the number of decimal places, in this case, it’s 2 decimal spaces.

39) What are logical errors and how does it differ from syntax errors?

Program that contains logical errors tend to pass the compilation process, but the resulting output may not be the expected one. This happens when a wrong formula was inserted into the code, or a wrong sequence of commands was performed. Syntax errors, on the other hand, deal with incorrect commands that are misspelled or not recognized by the compiler.

40) What are the different types of control structures in programming?

There are 3 main control structures in programming: Sequence, Selection and Repetition. Sequential control follows a top to bottom flow in executing a program, such that step 1 is first perform, followed by step 2, all the way until the last step is performed. Selection deals with conditional statements, which mean codes are executed depending on the evaluation of conditions as being TRUE or FALSE. This also means that not all codes may be executed, and there are alternative flows within. Repetitions are also known as loop structures, and will repeat one or two program statements set by a counter.

41) What is || operator and how does it function in a program?

The || is also known as the OR operator in C programming. When using || to evaluate logical conditions, any condition that evaluates to TRUE will render the entire condition statement as TRUE.

42) Can the “if” function be used in comparing strings?

No. “if” command can only be used to compare numerical values and single character values. For comparing string values, there is another function called strcmp that deals specifically with strings.

43) What are preprocessor directives?

Preprocessor directives are placed at the beginning of every C program. This is where library files are specified, which would depend on what functions are to be used in the program. Another use of preprocessor directives is the declaration of constants.Preprocessor directives begin with the # symbol.

44) What will be the outcome of the following conditional statement if the value of variable s is 10?

s >=10 && s < 25 && s!=12

The outcome will be TRUE. Since the value of s is 10, s >= 10 evaluates to TRUE because s is not greater than 10 but is still equal to 10. s< 25 is also TRUE since 10 is less then 25. Just the same, s!=12, which means s is not equal to 12, evaluates to TRUE. The && is the AND operator, and follows the rule that if all individual conditions are TRUE, the entire statement is TRUE.

45) Describe the order of precedence with regards to operators in C.

Order of precedence determines which operation must first take place in an operation statement or conditional statement. On the top most level of precedence are the unary operators !, +, – and &. It is followed by the regular mathematical operators (*, / and modulus % first, followed by + and -). Next in line are the relational operators <, <=, >= and >. This is then followed by the two equality operators == and !=. The logical operators && and || are next evaluated. On the last level is the assignment operator =.

46) What is wrong with this statement? myName = “Robin”;

You cannot use the = sign to assign values to a string variable. Instead, use the strcpy function. The correct statement would be: strcpy(myName, “Robin”);

47) How do you determine the length of a string value that was stored in a variable?

To get the length of a string value, use the function strlen(). For example, if you have a variable named FullName, you can get the length of the stored string value by using this statement: I = strlen(FullName); the variable I will now have the character length of the string value.

48) Is it possible to initialize a variable at the time it was declared ?

Yes, you don’t have to write a separate assignment statement after the variable declaration, unless you plan to change it later on. For example: char planet[15] = “Earth”; does two things: it declares a string variable named planet, then initializes it with the value “Earth”.

49) Why is C language being considered a middle level language?

This is because C language is rich in features that make it behave like a high level language while at the same time can interact with hardware using low level methods. The use of a well structured approach to programming, coupled with English-like words used in functions, makes it act as a high level language. On the other hand, C can directly access memory structures similar to assembly language routines.

50) What are the different file extensions involved when programming in C?

Source codes in C are saved with .C file extension. Header files or library files have the .H file extension. Every time a program source code is successfully compiled, it creates an .OBJ object file, and an executable .EXE file.

51) What are reserved words?

Reserved words are words that are part of the standard C language library. This means that reserved words have special meaning and therefore cannot be used for purposes other than what it is originally intended for. Examples of reserved words are int, void, and return.

52) What are linked list?

A linked list is composed of nodes that are connected with another. In C programming, linked lists are created using pointers. Using linked lists is one efficient way of utilizing memory for storage.

53) What is FIFO?

In C programming, there is a data structure known as queue. In this structure, data is stored and accessed using FIFO format, or First-In-First-Out. A queue represents a line wherein the first data that was stored will be the first one that is accessible as well.

54) What are binary trees?

Binary trees are actually an extension of the concept of linked lists. A binary tree has two pointers, a left one and a right one. Each side can further branch to form additional nodes, which each node having two pointers as well.

55) Not all reserved words are written in lowercase. TRUE or FALSE?

FALSE. All reserved words must be written in lowercase; otherwise the C compiler would interpret this as unidentified and invalid.

56) What is the difference between the expression “++a” and “a++”?

In the first expression, the increment would happen first on variable a, and the resulting value will be the one to be used. This is also known as a prefix increment. In the second expression, the current value of variable a would the one to be used in an operation, before the value of a itself is incremented. This is also known as postfix increment.

57) What would happen to X in this expression: X += 15; (assuming the value of X is 5)

X +=15 is a short method of writing X = X + 15, so if the initial value of X is 5, then 5 + 15 = 20.

58) In C language, the variables NAME, name, and Name are all the same. TRUE or FALSE?

FALSE. C language is a case sensitive language. Therefore, NAME, name and Name are three uniquely different variables.

59) What is an endless loop?

An endless loop can mean two things. One is that it was designed to loop continuously until the condition within the loop is met, after which a break function would cause the program to step out of the loop. Another idea of an endless loop is when an incorrect loop condition was written, causing the loop to run erroneously forever. Endless loops are oftentimes referred to as infinite loops.

60) What is a program flowchart and how does it help in writing a program?

A flowchart provides a visual representation of the step by step procedure towards solving a given problem. Flowcharts are made of symbols, with each symbol in the form of different shapes. Each shape may represent a particular entity within the entire program structure, such as a process, a condition, or even an input/output phase.

61) What is wrong with this program statement? void = 10;

The word void is a reserved word in C language. You cannot use reserved words as a user-defined variable.

62) Is this program statement valid? INT = 10.50;

Assuming that INT is a variable of type float, this statement is valid. One may think that INT is a reserved word and must not be used for other purposes. However, recall that reserved words are express in lowercase, so the C compiler will not interpret this as a reserved word.

63) What are actual arguments?

When you create and use functions that need to perform an action on some given values, you need to pass these given values to that function. The values that are being passed into the called function are referred to as actual arguments.

64) What is a newline escape sequence?

A newline escape sequence is represented by the \n character. This is used to insert a new line when displaying data in the output screen. More spaces can be added by inserting more \n characters. For example, \n\n would insert two spaces. A newline escape sequence can be placed before the actual output expression or after.

65) What is output redirection?

It is the process of transferring data to an alternative output source other than the display screen. Output redirection allows a program to have its output saved to a file. For example, if you have a program named COMPUTE, typing this on the command line as COMPUTE >DATA can accept input from the user, perform certain computations, then have the output redirected to a file named DATA, instead of showing it on the screen.

66) What are run-time errors?

These are errors that occur while the program is being executed. One common instance wherein run-time errors can happen is when you are trying to divide a number by zero. When run-time errors occur, program execution will pause, showing which program line caused the error.

67) What is the difference between functions abs() and fabs()?

These 2 functions basically perform the same action, which is to get the absolute value of the given value. Abs() is used for integer values, while fabs() is used for floating type numbers. Also, the prototype for abs() is under <stdlib.h>, while fabs() is under <math.h>.

68) What are formal parameters?

In using functions in a C program, formal parameters contain the values that were passed by the calling function. The values are substituted in these formal parameters and used in whatever operations as indicated within the main body of the called function.

69) What are control structures?

Control structures take charge at which instructions are to be performed in a program. This means that program flow may not necessarily move from one statement to the next one, but rather some alternative portions may need to be pass into or bypassed from, depending on the outcome of the conditional statements.

70) Write a simple code fragment that will check if a number is positive or negative .

C

1

2

3

4

5

6

7

If (num&gt;=0)

printf(&quot;number is positive&quot;);

else

printf (&quot;number is negative&quot;);

71) When is a “switch” statement preferable over an “if” statement?

The switch statement is best used when dealing with selections based on a single variable or expression. However, switch statements can only evaluate integer and character data types.

72) What are global variables and how do you declare them?

Global variables are variables that can be accessed and manipulated anywhere in the program. To make a variable global, place the variable declaration on the upper portion of the program, just after the preprocessor directives section.

73) What are enumerated types?

Enumerated types allow the programmer to use more meaningful words as values to a variable. Each item in the enumerated type variable is actually associated with a numeric code. For example, one can create an enumerated type variable named DAYS whose values are Monday, Tuesday… Sunday.

74) What does the function toupper() do?

It is used to convert any letter to its upper case mode. Toupper() function prototype is declared in <ctype.h>. Note that this function will only convert a single character, and not an entire string.

75) Is it possible to have a function as a parameter in another function?

Yes, that is allowed in C programming. You just need to include the entire function prototype into the parameter field of the other function where it is to be used.

76) What are multidimensional arrays?

Multidimensional arrays are capable of storing data in a two or more dimensional structure. For example, you can use a 2 dimensional array to store the current position of pieces in a chess game, or position of players in a tic-tac-toe program.

77) Which function in C can be used to append a string to another string?

The strcat function. It takes two parameters, the source string and the string value to be appended to the source string.

78) What is the difference between functions getch() and getche()?

Both functions will accept a character input value from the user. When using getch(), the key that was pressed will not appear on the screen, and is automatically captured and assigned to a variable. When using getche(), the key that was pressed by the user will appear on the screen, while at the same time being assigned to a variable.

79) Dothese two program statements perform the same output? 1) scanf(“%c”, &letter); 2) letter=getchar()

Yes, they both do the exact same thing, which is to accept the next key pressed by the user and assign it to variable named letter.

80) What are structure types in C?

Structure types are primarily used to store records. A record is made up of related fields. This makes it easier to organize a group of related data.

81) What does the characters “r” and “w” mean when writing programs that will make use of files?

“r” means “read” and will open a file as input wherein data is to be retrieved. “w” means “write”, and will open a file for output. Previous data that was stored on that file will be erased.

82) What is the difference between text files and binary files?

Text files contain data that can easily be understood by humans. It includes letters, numbers and other characters. On the other hand, binary files contain 1s and 0s that only computers can interpret.

83) is it possible to create your own header files?

Yes, it is possible to create a customized header file. Just include in it the function prototypes that you want to use in your program, and use the #include directive followed by the name of your header file.

84) What is dynamic data structure?

Dynamic data structure provides a means for storing data more efficiently into memory. Using dynamic memory allocation, your program will access memory spaces as needed. This is in contrast to static data structure, wherein the programmer has to indicate a fix number of memory space to be used in the program.

85) What are the different data types in C?

The basic data types are int, char, and float. Int is used to declare variables that will be storing integer values. Float is used to store real numbers. Char can store individual character values.

86) What is the general form of a C program?

A C program begins with the preprocessor directives, in which the programmer would specify which header file and what constants (if any) to be used. This is followed by the main function heading. Within the main function lies the variable declaration and program statement.

87) What is the advantage of a random access file?

If the amount of data stored in a file is fairly large, the use of random access will allow you to search through it quicker. If it had been a sequential access file, you would have to go through one record at a time until you reach the target data. A random access file lets you jump directly to the target address where data is located.

88) In a switch statement, what will happen if a break statement is omitted?

If a break statement was not placed at the end of a particular case portion? It will move on to the next case portion, possibly causing incorrect output.

89) Describe how arrays can be passed to a user defined function

One thing to note is that you cannot pass the entire array to a function. Instead, you pass to it a pointer that will point to the array first element in memory. To do this, you indicate the name of the array without the brackets.

90) What are pointers?

Pointers point to specific areas in the memory. Pointers contain the address of a variable, which in turn may contain a value or even an address to another memory.

91) Can you pass an entire structure to functions?

Yes, it is possible to pass an entire structure to a function in a call by method style. However, some programmers prefer declaring the structure globally, then pass a variable of that structure type to a function. This method helps maintain consistency and uniformity in terms of argument type.

92) What is gets() function?

The gets() function allows a full line data entry from the user. When the user presses the enter key to end the input, the entire line of characters is stored to a string variable. Note that the enter key is not included in the variable, but instead a null terminator \0 is placed after the last character.

93) The % symbol has a special use in a printf statement. How would you place this character as part of the output on the screen?

You can do this by using %% in the printf statement. For example, you can write printf(“10%%”) to have the output appear as 10% on the screen.

94) How do you search data in a data file using random access method?

Use the fseek() function to perform random access input/ouput on a file. After the file was opened by the fopen() function, the fseek would require three parameters to work: a file pointer to the file, the number of bytes to search, and the point of origin in the file.

95) Are comments included during the compilation stage and placed in the EXE file as well?

No, comments that were encountered by the compiler are disregarded. Comments are mostly for the guidance of the programmer only and do not have any other significant use in the program functionality.

96) Is there a built-in function in C that can be used for sorting data?

Yes, use the qsort() function. It is also possible to create user defined functions for sorting, such as those based on the balloon sort and bubble sort algorithm.

97) What are the advantages and disadvantages of a heap?

Storing data on the heap is slower than it would take when using the stack. However, the main advantage of using the heap is its flexibility. That’s because memory in this structure can be allocated and remove in any particular order. Slowness in the heap can be compensated if an algorithm was well designed and implemented.

98) How do you convert strings to numbers in C?

You can write you own functions to do string to number conversions, or instead use C’s built in functions. You can use atof to convert to a floating point value, atoi to convert to an integer value, and atol to convert to a long integer value.

99) Create a simple code fragment that will swap the values of two variables num1 and num2.

C

1

2

3

4

5

6

7

int temp;

temp = num1;

num1 = num2;

num2 = temp;

100) What is the use of a semicolon (;) at the end of every program statement?

It has to do with the parsing process and compilation of the code. A semicolon acts as a delimiter, so that the compiler knows where each statement ends, and can proceed to divide the statement into smaller elements for syntax checking.

Section 1. Declarations and Initializations

1.1: How do you decide which integer type to use?

A: If you might need large values (tens of thousands), use long.

Otherwise, if space is very important, use short. Otherwise,

use int.

1.4: What should the 64-bit type on a machine that can support it?

A: C9X specifies long long.

1.7: What's the best way to declare and define global variables?

A: The best arrangement is to place each definition in some

relevant .c file, with an external declaration in a header file.

1.11: What does extern mean in a function declaration?

A: Nothing, really; the keyword extern is optional here.

1.12: What's the auto keyword good for?

A: Nothing.

1.14: I can't seem to define a linked list node which contains a

pointer to itself.

A: Structures in C can certainly contain pointers to themselves;

the discussion and example in section 6.5 of K&R make this

clear. Problems arise if an attempt is made to define (and use)

a typedef in the midst of such a declaration; avoid this.

1.21: How do I declare an array of N pointers to functions returning

pointers to functions returning pointers to characters?

A: char *(*(*a[N])())();

Using a chain of typedefs, or the cdecl program, makes these

declarations easier.

1.22: How can I declare a function that returns a pointer to a

function of its own type?

A: You can't quite do it directly. Use a cast, or wrap a struct

around the pointer and return that.

1.25: My compiler is complaining about an invalid redeclaration of a

function, but I only define it once.

A: Calling an undeclared function declares it implicitly as

returning int.

1.25b: What's the right declaration for main()?

A: See questions 11.12a to 11.15.

1.30: What am I allowed to assume about the initial values

of variables which are not explicitly initialized?

A: Uninitialized variables with "static" duration start out as 0,

as if the programmer had initialized them. Variables with

"automatic" duration, and dynamically-allocated memory, start

out containing garbage (with the exception of calloc).

1.31: Why can't I initialize a local array with a string?

A: Perhaps you have a pre-ANSI compiler.

1.31b: What's wrong with "char *p = malloc(10);" ?

A: Function calls are not allowed in initializers for global or

static variables.

1.32: What is the difference between char a[] = "string"; and

char *p = "string"; ?

A: The first declares an initialized and modifiable array; the

second declares a pointer initialized to a not-necessarily-

modifiable constant string.

1.34: How do I initialize a pointer to a function?

A: Use something like "extern int func(); int (*fp)() = func;" .

Section 2. Structures, Unions, and Enumerations

2.1: What's the difference between struct x1 { ... }; and

typedef struct { ... } x2; ?

A: The first structure is named by a tag, the second by a typedef

name.

2.2: Why doesn't "struct x { ... }; x thestruct;" work?

A: C is not C++.

2.3: Can a structure contain a pointer to itself?

A: See question 1.14.

2.4: What's the best way of implementing opaque (abstract) data types

in C?

A: One good way is to use structure pointers which point to

structure types which are not publicly defined.

2.6: I came across some code that declared a structure with the last

member an array of one element, and then did some tricky

allocation to make it act like the array had several elements.

Is this legal or portable?

A: An official interpretation has deemed that it is not strictly

conforming with the C Standard.

2.7: I heard that structures could be assigned to variables and

passed to and from functions, but K&R1 says not.

A: These operations are supported by all modern compilers.

2.8: Is there a way to compare structures automatically?

A: No.

2.10: Can I pass constant values to functions which accept structure

arguments?

A: Not yet. As of this writing, C has no way of generating

anonymous structure values.

2.11: How can I read/write structures from/to data files?

A: It is relatively straightforward to use fread and fwrite.

2.12: How can I turn off structure padding?

A: There is no standard method.

2.13: Why does sizeof report a larger size than I expect for a

structure type?

A: The alignment of arrays of structures must be preserved.

2.14: How can I determine the byte offset of a field within a

structure?

A: ANSI C defines the offsetof() macro, which should be used if

available.

2.15: How can I access structure fields by name at run time?

A: Build a table of names and offsets, using the offsetof() macro.

2.18: I have a program which works correctly, but dumps core after it

finishes. Why?

A: Check to see if a structure type declaration just before main()

is missing its trailing semicolon, causing main() to be declared

as returning a structure. See also questions 10.9 and 16.4.

2.20: Can I initialize unions?

A: The current C Standard allows an initializer for the first-named

member.

2.22: What is the difference between an enumeration and a set of

preprocessor #defines?

A: At the present time, there is little difference. The C Standard

states that enumerations are compatible with integral types.

2.24: Is there an easy way to print enumeration values symbolically?

A: No.

Section 3. Expressions

3.1: Why doesn't the code "a[i] = i++;" work?

A: The variable i is both referenced and modified in the same

expression.

3.2: Under my compiler, the code "int i = 7;

printf("%d\n", i++ * i++);" prints 49. Regardless of the order

of evaluation, shouldn't it print 56?

A: The operations implied by the postincrement and postdecrement

operators ++ and -- are performed at some time after the

operand's former values are yielded and before the end of the

expression, but not necessarily immediately after, or before

other parts of the expression are evaluated.

3.3: What should the code "int i = 3; i = i++;" do?

A: The expression is undefined.

3.3b: Here's a slick expression: "a ^= b ^= a ^= b". It swaps a and b

without using a temporary.

A: Not portably; its behavior is undefined.

3.4: Don't precedence and parentheses dictate order of evaluation?

3.3b: Here's a slick expression: "a ^= b ^= a ^= b". It swaps a and b

without using a temporary.

A: Not portably; its behavior is undefined.

3.4: Don't precedence and parentheses dictate order of evaluation?

A: Operator precedence and explicit parentheses impose only a

partial ordering on the evaluation of an expression, which does

not generally include the order of side effects.

3.5: But what about the && and || operators?

A: There is a special exception for those operators: left-to-right

evaluation is guaranteed.

3.8: What's a "sequence point"?

A: A point (at the end of a full expression, or at the ||, &&, ?:,

or comma operators, or just before a function call) at which all

side effects are guaranteed to be complete.

3.9: So given a[i] = i++; we don't know which cell of a[] gets

written to, but i does get incremented by one, right?

A: *No*. Once an expression or program becomes undefined, *all*

aspects of it become undefined.

3.12: If I'm not using the value of the expression, should I use i++

or ++i to increment a variable?

A: Since the two forms differ only in the value yielded, they are

entirely equivalent when only their side effect is needed.

3.14: Why doesn't the code "int a = 1000, b = 1000;

long int c = a * b;" work?

A: You must manually cast one of the operands to (long).

3.16: Can I use ?: on the left-hand side of an assignment expression?

A: No.

Section 4. Pointers

4.2: What's wrong with "char *p; *p = malloc(10);"?

A: The pointer you declared is p, not *p.

4.3: Does *p++ increment p, or what it points to?

A: *p++ increments p. To increment the value pointed to by p, use

(*p)++ .

4.5: I want to use a char * pointer to step over some ints. Why

doesn't "((int *)p)++;" work?

A: In C, a cast operator is a conversion operator, and by

definition it yields an rvalue, which cannot be assigned to, or

incremented with ++.

4.8: I have a function which accepts, and is supposed to initialize,

a pointer, but the pointer in the caller remains unchanged.

A: The called function probably altered only the passed copy of the

pointer.

4.9: Can I use a void ** pointer as a parameter so that a function

can accept a generic pointer by reference?

A: Not portably.

4.10: I have a function which accepts a pointer to an int. How can I

pass a constant like 5 to it?

A: You will have to declare a temporary variable.

4.11: Does C even have "pass by reference"?

A: Not really, though it can be simulated.

4.12: I've seen different methods used for calling functions via

A: The extra parentheses and explicit * are now>

Transfer interrupted!

older implementations require them.

Section 5. Null Pointers

5.1: What is this infamous null pointer, anyway?

A: For each pointer type, there is a special value -- the "null

pointer" -- which is distinguishable from all other pointer

values and which is not the address of any object or function.

5.2: How do I get a null pointer in my programs?

A: A constant 0 in a pointer context is converted into a null

pointer at compile time. A "pointer context" is an

initialization, assignment, or comparison with one side a

variable or expression of pointer type, and (in ANSI standard C)

a function argument which has a prototype in scope declaring a

certain parameter as being of pointer type. In other contexts

(function arguments without prototypes, or in the variable part

of variadic function calls) a constant 0 with an appropriate

explicit cast is required.

5.3: Is the abbreviated pointer comparison "if(p)" to test for non-

null pointers valid?

A: Yes. The construction "if(p)" works, regardless of the internal

representation of null pointers, because the compiler

essentially rewrites it as "if(p != 0)" and goes on to convert 0

into the correct null pointer.

5.4: What is NULL and how is it #defined?

A: NULL is simply a preprocessor macro, #defined as 0 (or

((void *)0)), which is used (as a stylistic convention, in

preference to unadorned 0's) to generate null pointers.

5.5: How should NULL be defined on a machine which uses a nonzero bit

pattern as the internal representation of a null pointer?

A: The same as on any other machine: as 0. (The compiler makes the

translation, upon seeing a 0, not the preprocessor; see also

question 5.4.)

5.6: If NULL were defined as "((char *)0)," wouldn't that make

function calls which pass an uncast NULL work?

A: Not in general. The complication is that there are machines

which use different internal representations for pointers to

different types of data. A cast is still required to tell the

compiler which kind of null pointer is required, since it may be

different from (char *)0.

5.9: If NULL and 0 are equivalent as null pointer constants, which

should I use?

A: Either; the distinction is entirely stylistic.

5.10: But wouldn't it be better to use NULL, in case the value of NULL

changes?

A: No. NULL is a constant zero, so a constant zero is equally

sufficient.

5.12: I use the preprocessor macro "#define Nullptr(type) (type *)0"

to help me build null pointers of the correct type.

A: This trick, though valid, does not buy much.

5.13: This is strange. NULL is guaranteed to be 0, but the null

pointer is not?

A: A "null pointer" is a language concept whose particular internal

value does not matter. A null pointer is requested in source

code with the character "0". "NULL" is a preprocessor macro,

which is always #defined as 0 (or ((void *)0)).

5.14: Why is there so much confusion surrounding null pointers?

A: The fact that null pointers are represented both in source code,

and internally to most machines, as zero invites unwarranted

assumptions. The use of a preprocessor macro (NULL) may seem to

suggest that the value could change some day, or on some weird

machine.

5.15: I'm confused. I just can't understand all this null pointer

stuff.

A: A simple rule is, "Always use `0' or `NULL' for null pointers,

and always cast them when they are used as arguments in function

calls."

5.16: Given all the confusion surrounding null pointers, wouldn't it

be easier simply to require them to be represented internally by

zeroes?

A: Such a requirement would accomplish little.

5.17: Seriously, have any actual machines really used nonzero null

pointers?

A: Machines manufactured by Prime, Honeywell-Bull, and CDC, as well

as Symbolics Lisp Machines, have done so.

5.20: What does a run-time "null pointer assignment" error mean?

A: It means that you've written, via a null pointer, to an invalid

location. (See also question 16.8.)

Section 6. Arrays and Pointers

6.1: I had the definition char a[6] in one source file, and in

another I declared extern char *a. Why didn't it work?

A: The declaration extern char *a simply does not match the actual

definition. Use extern char a[].

6.2: But I heard that char a[] was identical to char *a.

A: Not at all. Arrays are not pointers. A reference like x[3]

generates different code depending on whether x is an array or a

pointer.

6.3: So what is meant by the "equivalence of pointers and arrays" in

C?

A: An lvalue of type array-of-T which appears in an expression

decays into a pointer to its first element; the type of the

resultant pointer is pointer-to-T. So for an array a and

pointer p, you can say "p = a;" and then p[3] and a[3] will

access the same element.

6.4: Why are array and pointer declarations interchangeable as

function formal parameters?

A: It's supposed to be a convenience.

6.7: How can an array be an lvalue, if you can't assign to it?

A: An array is not a "modifiable lvalue."

6.8: What is the real difference between arrays and pointers?

A: Arrays automatically allocate space which is fixed in size and

location; pointers are dynamic.

6.9: Someone explained to me that arrays were really just constant

pointers.

A: An array name is "constant" in that it cannot be assigned to,

but an array is *not* a pointer.

6.11: I came across some "joke" code containing the "expression"

5["abcdef"] . How can this be legal C?

A: Yes, array subscripting is commutative in C. The array

subscripting operation a[e] is defined as being identical to

*((a)+(e)).

6.12: What's the difference between array and &array?

A: The type.

6.13: How do I declare a pointer to an array?

A: Usually, you don't want to. Consider using a pointer to one of

the array's elements instead.

6.14: How can I set an array's size at run time?

A: It's straightforward to use malloc() and a pointer.

6.15: How can I declare local arrays of a size matching a passed-in

array?

A: Until recently, you couldn't; array dimensions had to be compile-

time constants. C9X will fix this.

6.16: How can I dynamically allocate a multidimensional array?

A: The traditional solution is to allocate an array of pointers,

and then initialize each pointer to a dynamically-allocated

"row." See the full list for code samples.

6.17: Can I simulate a non-0-based array with a pointer?

A: Not if the pointer points outside of the block of memory it is

intended to access.

6.18: My compiler complained when I passed a two-dimensional array to

a function expecting a pointer to a pointer.

A: The rule by which arrays decay into pointers is not applied

recursively. An array of arrays (i.e. a two-dimensional array

in C) decays into a pointer to an array, not a pointer to a

pointer.

6.19: How do I write functions which accept two-dimensional arrays

when the width is not known at compile time?

A: It's not always particularly easy.

6.20: How can I use statically- and dynamically-allocated

multidimensional arrays interchangeably when passing them to

functions?

A: There is no single perfect method, but see the full list for

some ideas.

6.21: Why doesn't sizeof properly report the size of an array which is

a parameter to a function?

A: The sizeof operator reports the size of the pointer parameter

which the function actually receives.

Section 7. Memory Allocation

7.1: Why doesn't the code "char *answer; gets(answer);" work?

A: The pointer variable answer has not been set to point to any

valid storage. The simplest way to correct this fragment is to

use a local array, instead of a pointer.

7.2: I can't get strcat() to work. I tried "char *s3 =

strcat(s1, s2);" but I got strange results.

A: Again, the main problem here is that space for the concatenated

result is not properly allocated.

7.3: But the man page for strcat() says that it takes two char *'s as

arguments. How am I supposed to know to allocate things?

A: In general, when using pointers you *always* have to consider

memory allocation, if only to make sure that the compiler is

doing it for you.

7.3b: I just tried the code "char *p; strcpy(p, "abc");" and it

worked. Why didn't it crash?

A: You got "lucky".

7.3c: How much memory does a pointer variable allocate?

A: Only enough memory to hold the pointer itself, not any memory

for the pointer to point to.

7.5a: I have a function that is supposed to return a string, but when

it returns to its caller, the returned string is garbage.

A: Make sure that the pointed-to memory is properly (i.e. not

locally) allocated.

7.5b: So what's the right way to return a string?

A: Return a pointer to a statically-allocated buffer, a buffer

passed in by the caller, or memory obtained with malloc().

7.6: Why am I getting "warning: assignment of pointer from integer

lacks a cast" for calls to malloc()?

A: Have you #included <stdlib.h>?

7.7: Why does some code carefully cast the values returned by malloc

to the pointer type being allocated?

A: Before ANSI/ISO C, these casts were required to silence certain

warnings.

7.8: Why does so much code leave out the multiplication by

sizeof(char) when allocating strings?

A: Because sizeof(char) is, by definition, exactly 1.

7.14: I've heard that some operating systems don't actually allocate

malloc'ed memory until the program tries to use it. Is this

legal?

A: It's hard to say.

7.16: I'm allocating a large array for some numeric work, but malloc()

is acting strangely.

A: Make sure the number you're trying to pass to malloc() isn't

bigger than a size_t can hold.

7.17: I've got 8 meg of memory in my PC. Why can I only seem to

malloc 640K or so?

A: Under the segmented architecture of PC compatibles, it can be

difficult to use more than 640K with any degree of transparency.

See also question 19.23.

7.19: My program is crashing, apparently somewhere down inside malloc.

A: Make sure you aren't using more memory than you malloc'ed,

especially for strings (which need strlen(str) + 1 bytes).

7.20: You can't use dynamically-allocated memory after you free it,

can you?

A: No. Some early documentation implied otherwise, but the claim

is no longer valid.

7.21: Why isn't a pointer null after calling free()?

A: C's pass-by-value semantics mean that called functions can never

permanently change the values of their arguments.

7.22: When I call malloc() to allocate memory for a local pointer, do

I have to explicitly free() it?

A: Yes.

7.23: When I free a dynamically-allocated structure containing

pointers, do I also have to free each subsidiary pointer?

A: Yes.

7.24: Must I free allocated memory before the program exits?

A: You shouldn't have to.

7.25: Why doesn't my program's memory usage go down when I free

memory?

A: Most implementations of malloc/free do not return freed memory

to the operating system.

7.26: How does free() know how many bytes to free?

A: The malloc/free implementation remembers the size of each block

as it is allocated.

7.27: So can I query the malloc package to find out how big an

allocated block is?

A: Not portably.

7.30: Is it legal to pass a null pointer as the first argument to

realloc()?

A: ANSI C sanctions this usage, although several earlier

implementations do not support it.

7.31: What's the difference between calloc() and malloc()?

A: calloc() takes two arguments, and initializes the allocated

memory to all-bits-0.

7.32: What is alloca() and why is its use discouraged?

A: alloca() allocates memory which is automatically freed when the

function which called alloca() returns. alloca() cannot be

written portably, is difficult to implement on machines without

a stack, and fails under certain conditions if implemented

simply.

Section 8. Characters and Strings

8.1: Why doesn't "strcat(string, '!');" work?

A: strcat() concatenates *strings*, not characters.

8.2: Why won't the test if(string == "value") correctly compare

string against the value?

A: It's comparing pointers. To compare two strings, use strcmp().

8.3: Why can't I assign strings to character arrays?

A: Strings are arrays, and you can't assign arrays directly. Use

strcpy() instead.

8.6: How can I get the numeric (character set) value corresponding to

a character?

A: In C, if you have the character, you have its value.

8.9: Why is sizeof('a') not 1?

A: Character constants in C are of type int.

Section 9. Boolean Expressions and Variables

9.1: What is the right type to use for Boolean values in C?

A: There's no one right answer; see the full list for some

discussion.

9.2: What if a built-in logical or relational operator "returns"

something other than 1?

A: When a Boolean value is generated by a built-in operator, it is

guaranteed to be 1 or 0. (This is *not* true for some library

routines such as isalpha.)

9.3: Is if(p), where p is a pointer, valid?

A: Yes. See question 5.3.

Section 10. C Preprocessor

10.2: I've got some cute preprocessor macros that let me write C code

that looks more like Pascal. What do y'all think?

A: Bleah.

10.3: How can I write a generic macro to swap two values?

A: There is no good answer to this question. The best all-around

solution is probably to forget about using a macro.

10.4: What's the best way to write a multi-statement macro?

A: #define Func() do {stmt1; stmt2; ... } while(0) /* (no trailing ;) */

10.6: What are .h files and what should I put in them?

A: Header files (also called ".h files") should generally contain

common declarations and macro, structure, and typedef

definitions, but not variable or function definitions.

10.7: Is it acceptable for one header file to #include another?

A: It's a question of style, and thus receives considerable debate.

10.8a: What's the difference between #include <> and #include "" ?

A: Roughly speaking, the <> syntax is for Standard headers and ""

is for project headers.

10.8b: What are the complete rules for header file searching?

A: The exact behavior is implementation-defined; see the full list

for some discussion.

10.9: I'm getting strange syntax errors on the very first declaration

in a file, but it looks fine.

A: Perhaps there's a missing semicolon at the end of the last

declaration in the last header file you're #including.

10.10b: I'm #including the header file for a function, but the linker

keeps saying it's undefined.

A: See question 13.25.

10.11: Where can I get a copy of a missing header file?

A: Contact your vendor, or see question 18.16 or the full list.

10.12: How can I construct preprocessor #if expressions which compare

strings?

A: You can't do it directly; try #defining several manifest

constants and implementing conditionals on those.

10.13: Does the sizeof operator work in preprocessor #if directives?

A: No.

10.14: Can I use an #ifdef in a #define line, to define something two

different ways?

A: No.

10.15: Is there anything like an #ifdef for typedefs?

A: Unfortunately, no.

10.16: How can I use a preprocessor #if expression to detect

endianness?

A: You probably can't.

10.18: How can I preprocess some code to remove selected conditional

compilations, without preprocessing everything?

A: Look for a program called unifdef, rmifdef, or scpp.

10.19: How can I list all of the predefined identifiers?

A: If the compiler documentation is unhelpful, try extracting

printable strings from the compiler or preprocessor executable.

10.20: I have some old code that tries to construct identifiers with a

macro like "#define Paste(a, b) a/**/b", but it doesn't work any

more.

A: Try the ANSI token-pasting operator ##.

10.22: What does the message "warning: macro replacement within a

string literal" mean?

A: See question 11.18.

10.23-4: I'm having trouble using macro arguments inside string

literals, using the `#' operator.

A: See questions 11.17 and 11.18.

10.25: I've got this tricky preprocessing I want to do and I can't

figure out a way to do it.

A: Consider writing your own little special-purpose preprocessing

tool, instead.

10.26: How can I write a macro which takes a variable number of

arguments?

A: Here is one popular trick. Note that the parentheses around

printf's argument list are in the macro call, not the

definition.

#define DEBUG(args) (printf("DEBUG: "), printf args)

if(n != 0) DEBUG(("n is %d\n", n));

Section 11. ANSI/ISO Standard C

11.1: What is the "ANSI C Standard?"

A: In 1983, the American National Standards Institute (ANSI)

commissioned a committee to standardize the C language. Their

work was ratified as ANS X3.159-1989, and has since been adopted

as ISO/IEC 9899:1990, and later amended.

11.2: How can I get a copy of the Standard?

A: Copies are available from ANSI in New York, or from Global

Engineering Documents in Englewood, CO, or from any national

standards body, or from ISO in Geneva, or republished within one

or more books. See the unabridged list for details.

11.2b: Where can I get information about updates to the Standard?

A: See the full list for pointers.

11.3: My ANSI compiler is complaining about prototype mismatches for

parameters declared float.

A: You have mixed the new-style prototype declaration

"extern int func(float);" with the old-style definition

"int func(x) float x;". "Narrow" types are treated differently

according to which syntax is used. This problem can be fixed by

avoiding narrow types, or by using either new-style (prototype)

or old-style syntax consistently.

11.4: Can you mix old-style and new-style function syntax?

A: Doing so is currently legal, for most argument types

(see question 11.3).

11.5: Why does the declaration "extern int f(struct x *p);" give me a

warning message?

A: A structure declared (or even mentioned) for the first time

within a prototype cannot be compatible with other structures

declared in the same source file.

11.8: Why can't I use const values in initializers and array

dimensions?

A: The value of a const-qualified object is *not* a constant

expression in the full sense of the term.

11.9: What's the difference between "const char *p" and

"char * const p"?

A: The former declares a pointer to a constant character; the

latter declares a constant pointer to a character.

11.10: Why can't I pass a char ** to a function which expects a

const char **?

A: The rule which permits slight mismatches in qualified pointer

assignments is not applied recursively.

11.12a: What's the correct declaration of main()?

A: int main(int argc, char *argv[]) .

11.12b: Can I declare main() as void, to shut off these annoying "main

returns no value" messages?

A: No.

11.13: But what about main's third argument, envp?

A: It's a non-standard (though common) extension.

11.14: I believe that declaring void main() can't fail, since I'm

calling exit() instead of returning.

A: It doesn't matter whether main() returns or not, the problem is

that its caller may not even be able to *call* it correctly.

11.15: The book I've been using always uses void main().

A: It's wrong.

11.16: Is exit(status) truly equivalent to returning the same status

from main()?

A: Yes and no. (See the full list for details.)

11.17: How do I get the ANSI "stringizing" preprocessing operator `#'

to stringize the macro's value instead of its name?

A: You can use a two-step #definition to force a macro to be

expanded as well as stringized.

11.18: What does the message "warning: macro replacement within a

string literal" mean?

A: Some pre-ANSI compilers/preprocessors expanded macro parameters

even inside string literals and character constants.

11.19: I'm getting strange syntax errors inside lines I've #ifdeffed

out.

A: Under ANSI C, #ifdeffed-out text must still consist of "valid

preprocessing tokens." This means that there must be no

newlines inside quotes, and no unterminated comments or quotes

(i.e. no single apostrophes).

11.20: What are #pragmas ?

A: The #pragma directive provides a single, well-defined "escape

hatch" which can be used for extensions.

11.21: What does "#pragma once" mean?

A: It is an extension implemented by some preprocessors to help

make header files idempotent.

11.22: Is char a[3] = "abc"; legal?

A: Yes, in ANSI C.

11.24: Why can't I perform arithmetic on a void * pointer?

A: The compiler doesn't know the size of the pointed-to objects.

11.25: What's the difference between memcpy() and memmove()?

A: memmove() offers guaranteed behavior if the source and

destination arguments overlap.

11.26: What should malloc(0) do?

A: The behavior is implementation-defined.

11.27: Why does the ANSI Standard not guarantee more than six case-

insensitive characters of external identifier significance?

A: The problem is older linkers which cannot be forced (by mere

words in a Standard) to upgrade.

11.29: My compiler is rejecting the simplest possible test programs,

with all kinds of syntax errors.

A: Perhaps it is a pre-ANSI compiler.

11.30: Why are some ANSI/ISO Standard library functions showing up as

undefined, even though I've got an ANSI compiler?

A: Perhaps you don't have ANSI-compatible headers and libraries.

11.31: Does anyone have a tool for converting old-style C programs to

ANSI C, or for automatically generating prototypes?

A: See the full list for details.

11.32: Why won't frobozz-cc, which claims to be ANSI compliant, accept

this code?

A: Are you sure that the code being rejected doesn't rely on some

non-Standard extension?

11.33: What's the difference between implementation-defined,

unspecified, and undefined behavior?

A: If you're writing portable code, ignore the distinctions.

Otherwise, see the full list.

11.34: I'm appalled that the ANSI Standard leaves so many issues

undefined.

A: In most of these cases, the Standard is simply codifying

existing practice.

11.35: I just tried some allegedly-undefined code on an ANSI-conforming

compiler, and got the results I expected.

A: A compiler may do anything it likes when faced with undefined

behavior, including doing what you expect.

Section 12. Stdio

12.1: What's wrong with the code "char c; while((c = getchar()) !=

EOF) ..."?

A: The variable to hold getchar's return value must be an int.

12.2: Why won't the code "while(!feof(infp)) {

fgets(buf, MAXLINE, infp); fputs(buf, outfp); }" work?

A: EOF is only indicated *after* an input routine fails.

12.4: My program's prompts and intermediate output don't always show

up on the screen.

A: It's best to use an explicit fflush(stdout) whenever output

should definitely be visible.

12.5: How can I read one character at a time, without waiting for the

RETURN key?

A: See question 19.1.

12.6: How can I print a '%' character with printf?

A: "%%".

12.9: How can printf() use %f for type double, if scanf() requires

%lf?

A: C's "default argument promotions" mean that values of type float

are promoted to double.

12.9b: What printf format should I use for a typedef when I don't know

the underlying type?

A: Use a cast to convert the value to a known type, then use the

printf format matching that type.

12.10: How can I implement a variable field width with printf?

A: Use printf("%*d", width, x).

12.11: How can I print numbers with commas separating the thousands?

A: There is no standard routine (but see <locale.h>).

12.12: Why doesn't the call scanf("%d", i) work?

A: The arguments you pass to scanf() must always be pointers.

12.13: Why doesn't the code "double d; scanf("%f", &d);" work?

A: Unlike printf(), scanf() uses %lf for double, and %f for float.

12.15: How can I specify a variable width in a scanf() format string?

A: You can't.

12.17: When I read numbers from the keyboard with scanf "%d\n", it

seems to hang until I type one extra line of input.

A: Try using "%d" instead of "%d\n".

12.18: I'm reading a number with scanf %d and then a string with

gets(), but the compiler seems to be skipping the call to

gets()!

A: scanf() and gets() do not work well together.

12.19: I'm re-prompting the user if scanf() fails, but sometimes it

seems to go into an infinite loop.

A: scanf() tends to "jam" on bad input since it does not discard

it.

12.20: Why does everyone say not to use scanf()? What should I use

instead?

A: scanf() has a number of problems. Usually, it's easier to read

entire lines and then interpret them.

12.21: How can I tell how much destination buffer space I'll need for

an arbitrary sprintf call? How can I avoid overflowing the

destination buffer with sprintf()?

A: Use the new snprintf() function, if you can.

12.23: Why does everyone say not to use gets()?

A: It cannot be prevented from overflowing the input buffer.

12.24: Why does errno contain ENOTTY after a call to printf()?

A: Don't worry about it. It is only meaningful for a program to

inspect the contents of errno after an error has been reported.

12.25: What's the difference between fgetpos/fsetpos and ftell/fseek?

A: fgetpos() and fsetpos() use a special typedef which may allow

them to work with larger files than ftell() and fseek().

12.26: Will fflush(stdin) flush unread characters from the standard

input stream?

A: No.

12.30: I'm trying to update a file in place, by using fopen mode "r+",

but it's not working.

A: Be sure to call fseek between reading and writing.

12.33: How can I redirect stdin or stdout from within a program?

A: Use freopen().

12.34: Once I've used freopen(), how can I get the original stream

back?

A: There isn't a good way. Try avoiding freopen.

12.36b: How can I arrange to have output go two places at once?

A: You could write your own printf variant which printed everything

twice. See question 15.5.

12.38: How can I read a binary data file properly?

A: Be sure to specify "rb" mode when calling fopen().

Section 13. Library Functions

13.1: How can I convert numbers to strings?

A: Just use sprintf().

13.2: Why does strncpy() not always write a '\0'?

A: For mildly-interesting historical reasons.

13.5: Why do some versions of toupper() act strangely if given an

upper-case letter?

A: Older versions of toupper() and tolower() did not always work as

expected in this regard.

13.6: How can I split up a string into whitespace-separated fields?

A: Try strtok().

13.7: I need some code to do regular expression and wildcard matching.

A: regexp libraries abound; see the full list for details.

13.8: I'm trying to sort an array of strings with qsort(), using

strcmp() as the comparison function, but it's not working.

A: You'll have to write a "helper" comparison function which takes

two generic pointer arguments, converts them to char **, and

dereferences them, yielding char *'s which can be usefully

compared.

13.9: Now I'm trying to sort an array of structures, but the compiler

is complaining that the function is of the wrong type for

qsort().

A: The comparison function must be declared as accepting "generic

pointers" (const void *) which it then converts to structure

pointers.

13.10: How can I sort a linked list?

A: Algorithms like insertion sort and merge sort work well, or you

can keep the list in order as you build it.

13.11: How can I sort more data than will fit in memory?

A: You want an "external sort"; see the full list for details.

13.12: How can I get the time of day in a C program?

A: Just use the time(), ctime(), localtime() and/or strftime()

functions.

13.13: How can I convert a struct tm or a string into a time_t?

A: The ANSI mktime() function converts a struct tm to a time_t. No

standard routine exists to parse strings.

13.14: How can I perform calendar manipulations?

A: The ANSI/ISO Standard C mktime() and difftime() functions

provide some support for both problems.

13.14b: Does C have any Year 2000 problems?

A: No, although poorly-written C programs do. Make sure you know

that tm_year holds the value of the year minus 1900.

13.15: I need a random number generator.

A: The Standard C library has one: rand().

13.16: How can I get random integers in a certain range?

A: One method is something like

(int)((double)rand() / ((double)RAND_MAX + 1) * N)

13.17: Each time I run my program, I get the same sequence of numbers

back from rand().

A: You can call srand() to seed the pseudo-random number generator

with a truly random initial value.

13.18: I need a random true/false value, so I'm just taking rand() % 2,

but it's alternating 0, 1, 0, 1, 0...

A: Try using the higher-order bits: see question 13.16.

13.20: How can I generate random numbers with a normal or Gaussian

distribution?

A: See the longer versions of this list for ideas.

13.24: I'm trying to port this old program. Why do I get "undefined

external" errors for some library functions?

A: Some semistandard functions have been renamed or replaced over

the years; see the full list for details.

13.25: I get errors due to library functions being undefined even

though I #include the right header files.

A: You may have to explicitly ask for the correct libraries to be

searched.

13.26: I'm still getting errors due to library functions being

undefined, even though I'm requesting the right libraries.

A: Library search order is significant; usually, you must search

the libraries last.

13.28: What does it mean when the linker says that _end is undefined?

A: You generally get that message only when other symbols are

undefined, too.

Section 14. Floating Point

14.1: When I set a float variable to 3.1, why is printf printing it as

3.0999999?

A: Most computers use base 2 for floating-point numbers, and many

fractions (including 0.1 decimal) are not exactly representable

in base 2.

14.2: Why is sqrt(144.) giving me crazy numbers?

A: Make sure that you have #included <math.h>, and correctly

declared other functions returning double.

14.3: I keep getting "undefined: sin" compilation errors.

A: Make sure you're actually linking with the math library.

14.4: My floating-point calculations are acting strangely and giving

me different answers on different machines.

A: First, see question 14.2 above. If the problem isn't that

simple, see the full list for a brief explanation, or any good

programming book for a better one.

14.5: What's a good way to check for "close enough" floating-point

equality?

A: The best way is to use an accuracy threshold which is relative

to the magnitude of the numbers being compared.

14.6: How do I round numbers?

A: For positive numbers, try (int)(x + 0.5) .

14.7: Where is C's exponentiation operator?

A: Try using the pow() function.

14.8: The predefined constant M_PI seems to be missing from <math.h>.

A: That constant is not standard.

14.9: How do I test for IEEE NaN and other special values?

A: There is not yet a portable way, but see the full list for

ideas.

14.11: What's a good way to implement complex numbers in C?

A: It is straightforward to define a simple structure and some

arithmetic functions to manipulate them.

14.12: I'm looking for some mathematical library code.

A: See Ajay Shah's index of free numerical software at

ftp://ftp.math.psu.edu/pub/FAQ/numcomp-free-c .

14.13: I'm having trouble with a Turbo C program which crashes and says

something like "floating point formats not linked."

A: You may have to insert a dummy call to a floating-point library

function to force loading of floating-point support.

Section 15. Variable-Length Argument Lists

15.1: I heard that you have to #include <stdio.h> before calling

printf(). Why?

A: So that a proper prototype for printf() will be in scope.

15.2: How can %f be used for both float and double arguments in

printf()?

A: In variable-length argument lists, types char and short int are

promoted to int, and float is promoted to double.

15.3: Why don't function prototypes guard against mismatches in

printf's arguments?

A: Function prototypes do not provide any information about the

number and types of variable arguments.

15.4: How can I write a function that takes a variable number of

arguments?

A: Use the <stdarg.h> header.

15.5: How can I write a function that takes a format string and a

variable number of arguments, like printf(), and passes them to

printf() to do most of the work?

A: Use vprintf(), vfprintf(), or vsprintf().

15.6: How can I write a function analogous to scanf(), that calls

scanf() to do most of the work?

A: C9X will support vscanf().

15.7: I have a pre-ANSI compiler, without <stdarg.h>. What can I do?

A: There's an older header, <varargs.h>, which offers about the

same functionality.

15.8: How can I discover how many arguments a function was actually

called with?

A: Any function which takes a variable number of arguments must be

able to determine *from the arguments' values* how many of them

there are.

15.9: My compiler isn't letting me declare a function that accepts

*only* variable arguments.

A: Standard C requires at least one fixed argument.

15.10: Why isn't "va_arg(argp, float)" working?

A: Because the "default argument promotions" apply in variable-

length argument lists, you should always use

va_arg(argp, double).

15.11: I can't get va_arg() to pull in an argument of type pointer-to-

function.

A: Use a typedef.

15.12: How can I write a function which takes a variable number of

arguments and passes them to some other function ?

A: In general, you cannot.

15.13: How can I call a function with an argument list built up at run

time?

A: You can't.

Section 16. Strange Problems

16.1b: I'm getting baffling syntax errors which make no sense at all,

and it seems like large chunks of my program aren't being

compiled.

A: Check for unclosed comments or mismatched preprocessing

directives.

16.1c: Why isn't my procedure call working?

A: Function calls always require parenthesized argument lists.

16.3: This program crashes before it even runs!

A: Look for very large, local arrays.

(See also questions 11.12b, 16.4, 16.5, and 18.4.)

16.4: I have a program that seems to run correctly, but then crashes

as it's exiting.

A: See the full list for ideas.

16.5: This program runs perfectly on one machine, but I get weird

results on another.

A: See the full list for a brief list of possibilities.

16.6: Why does the code "char *p = "hello, world!"; p[0] = 'H';"

crash?

A: String literals are not modifiable, except (in effect) when they

are used as array initializers.

16.8: What does "Segmentation violation" mean?

A: It generally means that your program tried to access memory it

shouldn't have, invariably as a result of stack corruption or

improper pointer use.

Section 17. Style

17.1: What's the best style for code layout in C?

A: There is no one "best style," but see the full list for a few

suggestions.

17.3: Is the code "if(!strcmp(s1, s2))" good style?

A: Not particularly.

17.4: Why do some people write if(0 == x) instead of if(x == 0)?

A: It's a trick to guard against the common error of writing

if(x = 0) .

17.5: I came across some code that puts a (void) cast before each call

to printf(). Why?

A: To suppress warnings about otherwise discarded return values.

17.8: What is "Hungarian Notation"?

A: It's a naming convention which encodes information about a

variable's type in its name.

17.9: Where can I get the "Indian Hill Style Guide" and other coding

standards?

A: See the unabridged list.

17.10: Some people say that goto's are evil and that I should never use

them. Isn't that a bit extreme?

A: Yes. Absolute rules are an imperfect approach to good

programming style.

Section 18. Tools and Resources

18.1: I'm looking for C development tools (cross-reference generators,

code beautifiers, etc.).

A: See the full list for a few names.

18.2: How can I track down these pesky malloc problems?

A: See the full list for a list of tools.

18.3: What's a free or cheap C compiler I can use?

A: See the full list for a brief catalog.

18.4: I just typed in this program, and it's acting strangely. Can

you see anything wrong with it?

A: See if you can run lint first.

18.5: How can I shut off the "warning: possible pointer alignment

problem" message which lint gives me for each call to malloc()?

A: It may be easier simply to ignore the message, perhaps in an

automated way with grep -v.

18.7: Where can I get an ANSI-compatible lint?

A: See the unabridged list for two commercial products.

18.8: Don't ANSI function prototypes render lint obsolete?

A: No. A good compiler may match most of lint's diagnostics; few

provide all.

18.9: Are there any C tutorials or other resources on the net?

A: There are several of them.

18.10: What's a good book for learning C?

A: There are far too many books on C to list here; the full list

contains a few pointers.

18.13: Where can I find the sources of the standard C libraries?

A: Several possibilites are listed in the full list.

18.13b: Is there an on-line C reference manual?

A: Two possibilities are

http://www.cs.man.ac.uk/standard_c/_index.html and

http://www.dinkumware.com/htm_cl/index.html .

18.13c: Where can I get a copy of the ANSI/ISO C Standard?

A: See question 11.2.

18.14: I need code to parse and evaluate expressions.

A: Several available packages are mentioned in the full list.

18.15: Where can I get a BNF or YACC grammar for C?

A: See the ANSI Standard, or the unabridged list.

18.15b: Does anyone have a C compiler test suite I can use?

A: See the full list for several sources.

18.15c: Where are some collections of useful code fragments and

examples?

A: See the full list for a few sources.

18.15d: I need code for performing multiple precision arithmetic.

A: See the full list for a few ideas.

18.16: Where and how can I get copies of all these freely distributable

programs?

A: See the regular postings in the comp.sources.unix and

comp.sources.misc newsgroups, or the full version of this list,

for information.

Section 19. System Dependencies

19.1: How can I read a single character from the keyboard without

waiting for the RETURN key?

A: Alas, there is no standard or portable way to do this sort of

thing in C.

19.2: How can I find out how many characters are available for

reading, or do a non-blocking read?

A: These, too, are entirely operating-system-specific.

19.3: How can I display a percentage-done indication that updates

itself in place, or show one of those "twirling baton" progress

indicators?

A: The character '\r' is a carriage return, and '\b' is a

backspace.

19.4: How can I clear the screen, or print text in color, or move the

cursor?

A: The only halfway-portable solution is the curses library.

19.5: How do I read the arrow keys? What about function keys?

A: Such things depend on the keyboard, operating system, and

library you're using.

19.6: How do I read the mouse?

A: What system are you using?

19.7: How can I do serial ("comm") port I/O?

A: It's system-dependent.

19.8: How can I direct output to the printer?

A: See the full list for ideas.

19.9: How do I send escape sequences to control a terminal or other

device?

A: By sending them. ESC is '\033' in ASCII.

19.10: How can I do graphics?

A: There is no portable way.

19.11: How can I check whether a file exists?

A: You can try the access() or stat() functions. Otherwise, the

only guaranteed and portable way is to try opening the file.

19.12: How can I find out the size of a file, prior to reading it in?

A: You might be able to get an estimate using stat() or fseek/ftell

(but see the full list for caveats).

19.12b: How can I find the modification date of a file?

A: Try stat().

19.13: How can a file be shortened in-place without completely clearing

or rewriting it?

A: There are various ways to do this, but there is no portable

solution.

19.14: How can I insert or delete a line in the middle of a file?

A: Short of rewriting the file, you probably can't.

19.15: How can I recover the file name given an open file descriptor?

A: This problem is, in general, insoluble. It is best to remember

the names of files yourself as you open them

19.16: How can I delete a file?

A: The Standard C Library function is remove().

19.16b: How do I copy files?

A: Open the source and destination files and copy a character or

block at a time, or see question 19.27.

19.17: What's wrong with the call fopen("c:\newdir\file.dat", "r")?

A: You probably need to double those backslashes.

19.18: How can I increase the allowable number of simultaneously open

files?

A: Check your system documentation.

19.20: How can I read a directory in a C program?

A: See if you can use the opendir() and readdir() functions.

19.22: How can I find out how much memory is available?

A: Your operating system may provide a routine which returns this

information.

19.23: How can I allocate arrays or structures bigger than 64K?

A: Some operating systems won't let you.

19.24: What does the error message "DGROUP exceeds 64K" mean?

A: It means that you have too much static data.

19.25: How can I access memory located at a certain address?

A: Set a pointer to the absolute address.

19.27: How can I invoke another program from within a C program?

A: Use system().

19.30: How can I invoke another program and trap its output?

A: Unix and some other systems provide a popen() function.

19.31: How can my program discover the complete pathname to the

executable from which it was invoked?

A: argv[0] may contain all or part of the pathname. You may be

able to duplicate the command language interpreter's search path

logic to locate the executable.

19.32: How can I automatically locate a program's configuration files

in the same directory as the executable?

A: It's hard; see also question 19.31 above.

19.33: How can a process change an environment variable in its caller?

A: If it's possible to do so at all, it's system dependent.

19.36: How can I read in an object file and jump to locations in it?

A: You want a dynamic linker or loader.

19.37: How can I implement a delay, or time a user's response, with sub-

second resolution?

A: Unfortunately, there is no portable way.

19.38: How can I trap or ignore keyboard interrupts like control-C?

A: Use signal().

19.39: How can I handle floating-point exceptions gracefully?

A: Take a look at matherr() and signal(SIGFPE).

19.40: How do I... Use sockets? Do networking? Write client/server

applications?

A: These questions have more to do with the networking facilities

you have available than they do with C.

19.40b: How do I... Use BIOS calls? Write ISR's? Create TSR's?

A: These are very particular to a particular system.

19.40c: I'm trying to compile a program in which "union REGS" and

int86() are undefined.

A: Those have to do with MS-DOS interrupt programming.

19.41: But I can't use all these nonstandard, system-dependent

functions, because my program has to be ANSI compatible!

A: That's an impossible requirement. Any real program requires at

least a few services which ANSI doesn't define.

Section 20. Miscellaneous

20.1: How can I return multiple values from a function?

A: Either pass pointers to several locations which the function can

fill in, or have the function return a structure containing the

desired values.

20.3: How do I access command-line arguments?

A: Via main()'s argv parameter.

20.5: How can I write data files which can be read on other machines

with different data formats?

A: The most portable solution is to use text files.

20.6: How can I call a function, given its name as a string?

A: The most straightforward thing to do is to maintain a

correspondence table of names and function pointers.

20.8: How can I implement sets or arrays of bits?

A: Use arrays of char or int, with a few macros to access the

desired bit at the proper index.

20.9: How can I determine whether a machine's byte order is big-endian

or little-endian?

A: The usual tricks involve pointers or unions.

20.10: How can I convert integers to binary or hexadecimal?

A: Internally, integers are already in binary. During I/O, you may

be able to select a base.

20.11: Can I use base-2 constants (something like 0b101010)?

Is there a printf() format for binary?

A: No, on both counts.

20.12: What is the most efficient way to count the number of bits which

are set in an integer?

A: Many "bit-fiddling" problems like this one can be sped up and

streamlined using lookup tables.

20.13: What's the best way of making my program efficient?

A: By picking good algorithms and implementing them carefully.

20.14: Are pointers really faster than arrays? How much do function

calls slow things down?

A: Precise answers to these and many similar questions depend on

the processor and compiler in use.

20.15b: People claim that optimizing compilers are good, but mine can't

even replace i/=2 with a shift.

A: Was i signed or unsigned?

20.15c: How can I swap two values without using a temporary?

A: The "clever" trick is a ^= b; b ^= a; a ^= b; see also question

3.3b.

20.17: Is there a way to switch on strings?

A: Not directly.

20.18: Is there a way to have non-constant case labels (i.e. ranges or

arbitrary expressions)?

A: No.

20.19: Are the outer parentheses in return statements really optional?

A: Yes.

20.20: Why don't C comments nest? Are they legal inside quoted

strings?

A: C comments don't nest because PL/I's comments don't either. The

character sequences /* and */ are not special within double-

quoted strings.

20.20b: What does a+++++b mean ?

A: Nothing. It's interpreted as "a ++ ++ + b", and cannot be

parsed.

20.24: Why doesn't C have nested functions?

A: They were deliberately left out of C as a simplification.

20.24b: What is assert()?

A: It is a macro which documents an assumption being made by the

programmer; it terminates the program if the assumption is

violated.

20.25: How can I call FORTRAN (C++, BASIC, Pascal, Ada, LISP) functions

from C?

A: The answer is entirely dependent on the machine and the specific

calling sequences of the various compilers in use.

20.26: Does anyone know of a program for converting Pascal or FORTRAN

to C?

A: Several freely distributable programs are available, namely

ptoc, p2c, and f2c. See the full list for details.

20.27: Can I use a C++ compiler to compile C code?

A: Not necessarily; C++ is not a strict superset of C.

20.28: I need to compare two strings for close, but not necessarily

exact, equality.

A: See the full list for ideas.

20.29: What is hashing?

A: A mapping of strings (or other data structures) to integers, for

easier searching.

20.31: How can I find the day of the week given the date?

A: Use mktime(), Zeller's congruence, or some code in the full

list.

20.32: Will 2000 be a leap year?

A: Yes.

20.34: How do you write a program which produces its own source code as

output?

A: Here's one:

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";

main(){printf(s,34,s,34);}

20.35: What is "Duff's Device"?

A: It's a devastatingly deviously unrolled byte-copying loop. See

the full list for details.

20.36: When will the next Obfuscated C Code Contest be held?

How can I get a copy of previous winning entries?

A: See the full list, or http://www.ioccc.org/index.html .

20.37: What was the entry keyword mentioned in K&R1?

A: It was reserved to allow functions with multiple, differently-

named entry points, but it has been withdrawn.

20.38: Where does the name "C" come from, anyway?

A: C was derived from B, which was inspired by BCPL, which was a

simplification of CPL.

20.39: How do you pronounce "char"?

A: Like the English words "char," "care," or "car" (your choice).

20.39b: What do "lvalue" and "rvalue" mean?

A: An "lvalue" denotes an object that has a location; an "rvalue"

is any expression that has a value.

Source: Contents are provided by Technicalsymposium Google Group Members.
Disclaimer: All the above contents are provided by technicalsymposium.com Google Group members.
Further, this content is not intended to be used for commercial purpose. Technicalsymposium.com is not liable/responsible for any copyright issues.

Technical Symposium.Com All Jobs & Certifications
Lecture Notes and Scholarships & Project Details

Fresher Jobs Details
job detailsAll Fresher Software Jobs Details
job detailsAll Government Jobs Details
job detailsAll Internships Details
job detailsOff-Campus Interviews/Walk-in Details
job detailsAll Competitive Exam Details
job detailsBank Clerk/Officers Jobs Details
job detailsB.Sc/M.Sc Graduate Fresher Jobs
job detailsAll Technical Jobs Details
job detailsAll State/Central Government Jobs Details
Conference/Symposium Details
job detailsAll International Conference Details
job detailsAll National Conference Details
job detailsAll Symposium/Workshop Details
job detailsUniversity Conferences Details
job detailsIIT/NIT/IIM Conference Details
job detailsComputer Science Conference Details
job detailsElectronics Conferences Details
job detailsMechanical Conferences Details
job detailsAll Latest Conferences Details
Calendar of Events Details
job detailsJanuary – List of All Event Details
job detailsFebruary – List of All Event Details
job detailsMarch– List of All Event Details
job detailsApril – List of All Event Details
job detailsMay – List of All Event Details
job detailsJune – List of All Event Details
job detailsJuly – List of All Event Details
job detailsAugust – List of All Event Details
job detailsAll Months - List of All Events Details
GATE Question Papers & Syllabus
job detailsAll GATE Previous Year Question Papers
job detailsGATE Syllabus for All Branches
job detailsGATE-Computer Science Question Papers
job detailsGATE – Mechanical Question Papers
job detailsGATE – ECE Question Papers
job detailsGATE- EEE Question Papers
job detailsGATE – Civil Engineering Question Papers
job detailsGATE – All Branches Question Papers
job detailsGATE Exam Pattern Details
IES Question Papers & Syllabus
job detailsIES Complete Information
job detailsIES Previous Year Question Papers
job detailsIES Syllabus for All Branches
job detailsIES – Mechanical Question Papers
job detailsIES - E & T Question Papers
job detailsIES - EEE Question Papers
job detailsIES -Civil Engineering Question Papers
job detailsIES - All Branches Question Papers
job detailsIES - Exam Pattern Details
All Companies Placement Materials
job detailsTCS Placement Papers
job detailsWIPRO Placement Papers
job detailsZOHO Placement Papers
job detailsCTS Placement Papers
job detailsINFOSYS Placement Papers
job detailsARICENT Placement Papers
job detailsSBI Placement Papers
job detailsRRB Placement Papers
job detailsBANK/IBPS Placement Papers
Aptitude Round Materials
job details Problem on Numbers
job detailsProblem on Trains
job detailsTime and Work
job detailsSimple Interest
job detailsAptitude Short- Cut Formulas
job detailsAptitude Tricks
job detailsOdd Man Out Series
job detailsSimplification Problems
job detailsProfit & Loss
Technical Round Materials
job detailsJAVA Technical Round Q & A
job detailsC Technical Round Q & A
job detailsC++ Technical Round Q & A
job detailsASP.NET Technical Round Q & A
job detailsData Structure Technical Round Q & A
job detailsSQL Technical Round Q & A
job detailsC# Technical Round Q & A
job detailsPHP Technical Round Q & A
job detailsJ2EE Technical Round Q & A
Software Programs and Lab Manuals
job detailsSurvey Lab Manuals
job detailsCAD/CAM Lab Manuals
job detailsOOPS/C++ Lab Manuals
job detailsJAVA/Internet Programming Manuals
job detailsList of All C Programs with Source Code
job detailsList of All Data Structure Programs
job detailsC Aptitude Programs
job detailsMicroprocessor & Micro Controller Manuals
job detailsAll Engineering Branches Lab Manuals
Anna University Syllabus & Question Papers
job detailsB.E/B.Tech Previous Year Question Papers
job detailsBE-Computer Science Syllabus
job detailsBE-Mechanical Engineering Syllabus
job detailsBE-Civil Engineering Syllabus
job detailsBE-ECE Syllabus
job detailsBE-EEE Syllabus
job detailsMBA/MCA Syllabus
job detailsBE-Aeronautical Engineering Syllabus
job detailsBE-Biomedical Syllabus
IBPS/Bank Syllabus & Question Papers
job detailsIBPS Clerk Exam Syllabus
job detailsIBPS Clerk Question Papers
job detailsIBPS Probationary Officers Syllabus
job detailsIBPS PO Question Papers
job detailsIBPS RRB Exam Syllabus
job detailsIBPS Special Officers Exam Syllabus
job detailsSBI Clerk/PO Syllabus
job detailsAll Private Banks PO/Clerk Syllabuses
job detailsAll Nationalized Bank Po/Clerk Syllabuses
Civil Engineering Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
Mechanical Engineering Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
Computer Science Engineering Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
MCA Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
MBA Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
ECE Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
EEE Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
Biotechnology Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
Chemical Engineering Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
Biomedical Engineering Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
Aeronautical Engineering Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsSeventh Semester Lecture Notes
job detailsEighth Semester Lecture Notes
job detailsLab Manuals
B.Sc (All Major Branches) Lecture Notes
job detailsMaths / Statistics Lecture Notes
job detailsPhysics Lecture Notes
job detailsChemistry Lecture Notes
job detailsElectronics Lecture Notes
job detailsComputer Science/IT Lecture Notes
job detailsAgriculture Lecture Notes
job detailsBiotechnology/Biomedical Lecture Notes
job detailsNursing Lecture Notes
job detailsFashion Technology Lecture Notes
M.Sc (All Major Branches) Lecture Notes
job detailsComputer Science/IT Lecture Notes
job detailsAgriculture Lecture Notes
job detailsBiotechnology/Biomedical Lecture Notes
job detailsNursing Lecture Notes
job detailsFashion Technology Lecture Notes
job detailsMaths / Statistics Lecture Notes
job detailsPhysics Lecture Notes
job detailsChemistry Lecture Notes
job detailsElectronics Lecture Notes
B.Com/M.Com Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsLab Manuals
job detailsCommerce Placement Materials
job detailsCommerce Placement Materials
BBA Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsLab Manuals
job detailsPlacement MaterialsEighth Semester Lecture Notes
job detailsFresher Jobs Details
BCA Lecture Notes
job detailsFirst Semester Lecture Notes
job detailsSecond Semester Lecture Notes
job detailsThird Semester Lecture Notes
job detailsFourth Semester Lecture Notes
job detailsFifth Semester Lecture Notes
job detailsSixth Semester Lecture Notes
job detailsLab Manuals
job detailsPlacement Materials
job detailsFresher Jobs Details

Hosting by Yahoo!

About-Us    Contact-Us    Site-map

©copyright All rights are reserved to technicalsymposium.com