Write a program to know the size of the data type without using sizeof operator.
#include <stdio.h> #define SIZEOFBYMACRO(x) ((char*)(&x+1) - (char*)&x) int my_sizeof(char *, char *); int main() { int i; char c; float f; double d; long double ld; long int l; long long int ll; printf("my_sizeof i = %d\n",my_sizeof(&i,&i+1)); printf("my_sizeof c = %d\n", my_sizeof(&c,&c+1)); printf("my_sizeof f = %d\n", my_sizeof(&f,&f+1)); printf("my_sizeof d = %d\n", my_sizeof(&d,&d+1)); printf("my_sizeof ld = %d\n", my_sizeof(&ld,&ld+1)); printf("my_sizeof l = %d\n", my_sizeof(&l,&l+1)); printf("my_sizeof ll = %d\n", my_sizeof(&ll,&ll+1)); printf("Size of by Macro\n"); printf("my_sizeof i = %d\n", SIZEOFBYMACRO(i)); printf("my_sizeof c = %d\n", SIZEOFBYMACRO(c)); printf("my_sizeof f = %d\n", SIZEOFBYMACRO(f)); printf("my_sizeof d = %d\n", SIZEOFBYMACRO(d)); printf("my_sizeof ld = %d\n", SIZEOFBYMACRO(ld)); printf("my_sizeof l = %d\n", SIZEOFBYMACRO(l)); printf("my_sizeof ll = %d\n", SIZEOFBYMACRO(ll)); return 0; } int my_sizeof(char *p, char *q) { return q - p; }
Output
my_sizeof i = 4 my_sizeof c = 1 my_sizeof f = 4 my_sizeof d = 8 my_sizeof ld = 16 my_sizeof l = 8 my_sizeof ll = 8 Size of by Macro my_sizeof i = 4 my_sizeof c = 1 my_sizeof f = 4 my_sizeof d = 8 my_sizeof ld = 16 my_sizeof l = 8 my_sizeof ll = 8