#include <unistd.h>
#include <stdlib.h>
#include <string.h>
struct {
void* arr[1024];
int size;
} stack = {{0}, -1};
static inline void stack_push(void* s) {
stack.arr[++stack.size % 1024] = s;
}
static inline void** stack_seek() {
return stack.arr + stack.size;
}
static inline void** stack_next_seek() {
return stack_seek() + 1;
}
int __main__(int, char**);
int main(int argc, char** argv) {
return __main__(argc, argv);
}
#define main __main__
#define define_one_size_in_struct(first, name, add) \
struct { \
first; unsigned long long size; add; \
} name
#define T_one_array(T, name, add) \
define_one_size_in_struct(T* d, name, add)
#define T_array(T, name, add) \
typedef T_one_array(T, name, add)
#define create_array(put) \
{put, sizeof(put)}
#define define_array(T, size, name, add) \
define_one_size_in_struct(T d[size], name, add)
#define for_arr(T, it, arr) \
for(T* it = arr.d; it != (char*)arr.d + arr.size; it++ )
#define define_string(name, _size_) \
static int name##_call_print(); \
static int name##_call_append(char*); \
define_array(char, _size_, name, int(*print)(); int(*append)(char*); ) \
= { .d = {0}, .size = _size_, .print = &name##_call_print, .append = &name##_call_append }; \
static int name##_call_print() { \
return write(STDOUT_FILENO, name.d, name.size-1); \
} \
static int name##_call_append(char* c_str) { \
char* read_ptr = c_str; \
char* write_ptr = name.d; \
while(*write_ptr) write_ptr++; \
while(write_ptr != name.d + name.size && *read_ptr) *(write_ptr++) = *(read_ptr++); \
return read_ptr - c_str; \
}
define_string(str, 64);
int main(int argc, char** argv) {
str.append("hello world\n");
str.print();
return 0;
}스텍 만들었는데 필요없더라
실패 맞음
