Calculating Sturcture Member Size
#include <stdio.h>
// Get size of struct member
#define MEMBER_SIZE(type, member) sizeof(((type*)0)->member)
// Get offset of struct member
#define MEMBER_OFFSET(type, member) ((size_t)(&(((type*)0)->member)))
typedef struct {
char x;
char y;
char z;
} coord_t;
typedef struct {
char a;
char c;
short b;
int d;
coord_t e;
} data_t;
int main() {
printf("MEMBER_SIZE(data_t, a) = %lu\n", MEMBER_SIZE(data_t, a));
printf("MEMBER_SIZE(data_t, c) = %lu\n", MEMBER_SIZE(data_t, c));
printf("MEMBER_SIZE(data_t, b) = %lu\n", MEMBER_SIZE(data_t, b));
printf("MEMBER_SIZE(data_t, d) = %lu\n", MEMBER_SIZE(data_t, d));
printf("MEMBER_SIZE(data_t, e) = %lu\n", MEMBER_SIZE(data_t, e));
printf("data_t size = %lu\n", sizeof(data_t));
printf("MEMBER_OFFSET(a): %lu\n", MEMBER_OFFSET(data_t, a));
printf("MEMBER_OFFSET(c): %lu\n", MEMBER_OFFSET(data_t, c));
printf("MEMBER_OFFSET(b): %lu\n", MEMBER_OFFSET(data_t, b));
printf("MEMBER_OFFSET(d): %lu\n", MEMBER_OFFSET(data_t, d));
printf("MEMBER_OFFSET(e): %lu\n", MEMBER_OFFSET(data_t, e));
return 0;
}
File Operations Wrapper
#include <stdio.h>
int file_write(const char* filename, void* data, size_t size) {
FILE* fp = fopen(filename, "wb");
if (!fp) return -1;
size_t written = fwrite(data, 1, size, fp);
fclose(fp);
return (written == size) ? 0 : -1;
}
int file_read(const char* filename, void* buffer, size_t size) {
FILE* fp = fopen(filename, "rb");
if (!fp) return -1;
size_t read = fread(buffer, 1, size, fp);
fclose(fp);
return (read == size) ? 0 : -1;
}
Progress Bar Implementation
#include <stdio.h>
#include <unistd.h>
void show_progress(int current, int total) {
int percent = current * 100 / total;
printf("[");
for (int i = 0; i < 100; i++) {
printf(i < percent ? "=" : " ");
}
printf("] %d%%\r", percent);
fflush(stdout);
}
Logging System
#include <stdio.h>
typedef enum {
LOG_DEBUG,
LOG_INFO,
LOG_WARN,
LOG_ERROR
} log_level_t;
void logger(log_level_t level, const char* msg, const char* file, int line) {
const char* levels[] = {"DEBUG", "INFO", "WARN", "ERROR"};
printf("%s: %s (%s:%d)\n", levels[level], msg, file, line);
}
#define LOG(level, msg) logger(level, msg, __FILE__, __LINE__)