The token # single in its own line is null directive. It is simply neglected by compiler. Thus, if the code is simply as given below, it is neglected by the compiler.
#
However, if it is used in a #define statement of a macro, then# is taken as replacement token. For example:
#define Func(Z) printf(“Hello #Z How are you?)
The operator sin the expression #z is replacement token, i.e., it replaces the value wherever z appears. The replacement is converted into a string with double quotes. For example, consider the following application of the above code:
#define F(z) printf (“Good Morning ” #z)
When function F (z) is called as F (Shubhra), it is equivalent to the following statement:
printf (“Good Morning Shubhra”);
Token##
The preprocessor operator ## is used along with #define and it puts together (concatenates) two tokens. For example, consider the following code for an illustration:
#define concat(A,B) A ## B
The above code would give output as AB. Thus, if the macro is called in the program as concat (1, 00) the output would be 100. Program provides an illustration.
#include<stdio.h> #define Func1(Z) printf("Hello" #Z" How are you?") #define Concate(a, b) a ## b void main() { Func1 (Shubhra!); printf("\n"); printf("Concatenate 1 and 00 = %d\n", Concate(1, 00) ); printf("Concatenate names= %s\n", Concate( "Shubhra", "Thakur")); printf("%s\n", Concate( "Let us learn" , "only C language.")); }