사칙연산이 없는 세계, 간단한 수식 연산기 ( 주의 )
1
더하기 빼기 곱하기 나누기 그리고 나머지 연산과 괄호 연산까지 가능한 버전임, 원래는 수식 연산기에 걸 맞도록 a-z 문자 연산과 log sprt 같은것도 지원하려고 했었지만 여러가지 이유로 못했음
이번에 추가된 메인 부분 ( 스파게티 코드 주의 )
주석처럼 이 함수를 보면 희망을 버리는게 맞음
// 이 함수를 보는자, 희망을 버려라!
char* sum(char* input) {
Array* array = NULL;
{
Node* node = NULL;
char* buf = str_cpy(input);
char swap_buffer = '\0';
char* buf_f = buf;
char* buf_p = buf;
while(*buf_p) {
switch( *buf_p ) {
case '+': case '-': case '*': case '/': case '%': case '(': case ')': SPS(buf_p, 1);
break;
case '\0':
continue;
break;
default:
if('0' <= *buf_p && *buf_p <= '9') while( *buf_p && ('0' <= *buf_p && *buf_p <= '9') ) { SPS(buf_p, 1); }
else {
SPS(buf_p, 1);
buf_f = buf_p;
continue;
}
break;
}
swap_buffer = *buf_p;
*buf_p = '\0';
char* str = str_cpy(buf_f);
*buf_p = swap_buffer;
{
Node* r = Node_push(node, str);
if(r == NULL) {
node = Node_free(node);
return NULL;
}
node = r;
}
buf_f = buf_p;
}
free(buf);
array = NodeToArray(node);
}
if(array == NULL) return NULL;
char* symarr[] = {
"*/%", "+-", ""
};
Node* bracket_node = NULL;
for(int point = 0; point <= array->c; SPP(point)){
int start = 0;
if(point == array->c) {
goto GOTO_FUNCTION;
} else switch(*(char*)array->d[point]) {
case '(':
{
int* d = malloc(sizeof(int));
if(!d) goto GOTO_ERROR;
*d = point;
Node* r = Node_push(bracket_node, d);
if(!r) {
free(d);
goto GOTO_ERROR;
}
bracket_node = r;
}
break;
case ')':
{
int d;
if(bracket_node) {
Node* n = bracket_node;
bracket_node = n->n;
d = *(int*)n->d;
free(n->d);
free(n);
} else {
bracket_node = Node_free(bracket_node);
goto GOTO_ERROR;
}
for(int j = d, h = PP(d); h < array->c; SPP(j), SPP(h)) {
array->d[j] = array->d[h];
}
SSS(array->c);
SSS(point);
start = d;
goto GOTO_FUNCTION;
GOTO_RETURN:
free(array->d[point]);
for(int i = point, j = PP(point); j < array->c; SPP(j), SPP(i)) {
array->d[i] = array->d[j];
}
SSS(array->c);
SSS(point);
continue;
}
break;
case '\0':
GOTO_FUNCTION:
{
//printf("%d pc: %d %d %d \n", __LINE__, start, point, array->c);
char** symarr_ptr = symarr;
while(**symarr_ptr) {
for(int i = start; i <= point && i < array->c; SPP(i)) {
char* sa_pp = *symarr_ptr;
while(*sa_pp) {
if( *(char*)(array->d[i]) == *sa_pp) break;
SPS(sa_pp, 1);
} if ( *sa_pp && 0 < i && PP(i) < array->c ) {
int flag = isNumber(array->d[SS(i)]) << 1 | isNumber(array->d[PP(i)]);
if(flag == 3) {
Num a, b, c; num_read(a, array->d[SS(i)]), num_read(b, array->d[PP(i)]);
switch (*sa_pp) {
case '+':
c_add(c, a, b);
break;
case '-':
c_sub(c, a, b);
break;
case '*':
c_mul(c, a, b);
break;
case '/':
c_div(c, a, b, nullnum);
break;
case '%':
c_div(nullnum, a, b, c);
break;
}
char* r = num_strdup(c);
if(!r) goto GOTO_ERROR;
free(array->d[SS(i)]), free(array->d[i]), free(array->d[PP(i)]);
array->d[SS(i)] = r;
for( int j = i, h = PP(PP(i)); h < array->c; SPP(j), SPP(h) ) {
array->d[j] = array->d[h];
}
array->c = SS(SS(array->c));
point = SS(SS(point));
SSS(i);
}
}
}
SPS(symarr_ptr, 1);
}
if(point < array->c) goto GOTO_RETURN;
break;
}
}
}
//for(int i = 0; i < array->c; SPP(i)) printf("%s ", array->d[i]);
if( '0' <= *(char*)array->d[0] && *(char*)array->d[0] <= '9' ); else goto GOTO_ERROR;
char* buf = str_cpy(array->d[0]);
array = Array_free(array);
return buf;
GOTO_ERROR:
array = Array_free(array);
return NULL;
}
goto 구문 사용은 물론 함수로 분리해야 하는 기능들까지 덕지덕지 안에서 구동해버리는 함수임, 만약에 후임이 이 함수를 받는다면 밤길 조심해야 할 정도
에딧도 이 함수를 보면 발작을 하는지, system_scanf만 만들어도 작동이 멈추더라, 원래도 무겁지만 그래도 잘 작동하는 것이... 최적화 이슈가...
원래는 이전글이랑 코드가 동일했었는데, 몇번 갈고 닦아서 다른 부분이 많아짐, 대표적으로 div가 있음
그리고 system_printf가 출력이라면 system_scanf은 입력임, 이번에 생긴 함수인데 잘 작동하는지는 모르겠다.
NS가 8이면 쾌적한데 32로 가면 연산 능력이 많이 딸림, 비효율적인 코드도 있겠지만 BCD가 왜 존재하는지 뼈저리게 깨닫게 해주더라
참고로 기본적으로는 음수 연산을 고려하지 않음
다른 부분이 많아졌으니 그냥 전문
#include <stdio.h>
#define NS 8
#define NUMITEM unsigned long long
typedef NUMITEM Num[NS];
static Num nullnum;
#define cfun(name) void c_##name (Num r, Num a, Num b)
cfun(add); cfun(sub); cfun(mul); void c_div(Num, Num, Num, Num);
int system_printf(char* format, ...);
int num_read(Num r, char* value);
unsigned long long PP(unsigned long long i) {
for(unsigned long long n = 1, w = ~0ULL; n; n <<= 1, w <<= 1) {
if(i & n); else {
i |= n;
i &= w;
return i;
}
}
return ~0;
}
unsigned long long SS(unsigned long long i) {
for(unsigned long long n = 1, w = ~0ULL; n; n <<= 1, w <<= 1) {
if(i & n) {
i |= ~w;
i &= ~n;
return i;
}
}
return ~0;
}
#define SPP(i) (i = PP(i))
#define SSS(i) (i = SS(i))
void c_cpy(Num b, Num n) {
for(int i = 0; i < NS; SPP(i)) {
b[i] = n[i];
}
}
void c_clear(Num n) {
Num b = {0};
c_cpy(n, b);
}
cfun(add) {
unsigned long long crad[3];
crad[2] = 0;
#define getIndexBit(n) (n[crad[1]] & crad[0])
#define R r[crad[1]]
#define C (crad[2])
for(crad[1] = 0; crad[1] < NS; SPP(crad[1])) for(crad[0] = 1; crad[0]; crad[0] = crad[0] << 1) {
unsigned long long A = !!getIndexBit(a);
unsigned long long B = !!getIndexBit(b);
R &= ~crad[0];
R |= (A^B^C ? crad[0] : 0);
C = A&B|B&C|C&A;
}
#undef C
#undef R
#undef getIndexBit
}
cfun(sub) {
unsigned long long crad[3];
crad[2] = 0;
#define getIndexBit(n) (n[crad[1]] & crad[0])
#define R r[crad[1]]
#define C (crad[2])
for(crad[1] = 0; crad[1] < NS; SPP(crad[1])) for(crad[0] = 1; crad[0]; crad[0] = crad[0] << 1) {
unsigned long long A = !!getIndexBit(a);
unsigned long long B = !!getIndexBit(b);
R &= ~crad[0];
R |= (A^B^C ? crad[0] : 0);
C = (!A)&B|B&C|C&(!A);
}
#undef C
#undef R
#undef getIndexBit
}
unsigned long long c_shift_left(Num n) {
unsigned long long c = 0, c_b = 0;
for(int i = 0; i < NS; SPP(i)) {
c_b = n[i] >> 63;
n[i] <<= 1;
n[i] |= c;
c = c_b;
}
return c;
}
unsigned long long c_shift_right(Num n) {
unsigned long long c = 0, c_b = 0;
for(int i = SS(NS); 0 <= i; SSS(i)) {
c_b = n[i] & 1;
n[i] >>= 1;
n[i] |= (c << 63);
c = c_b;
}
return c;
}
cfun(mul) {
Num buffer;
c_cpy(buffer, a);
c_clear(r);
for(int i = 0; i < NS; SPP(i)) for(unsigned long long s = 1; s; s <<= 1) {
if(b[i] & s) c_add(r, r, buffer);
c_shift_left(buffer);
}
}
int c_cmp(Num a, Num b) {
for(long long i = SS(NS); 0 <= i; i = SS(i)) {
if(a[i] == b[i]) continue;
if(a[i] > b[i]) return SS(0);
if(a[i] < b[i]) return 1;
}
return 0;
}
void c_div(Num r, Num a, Num b, Num m) {
int index = 0;
Num buffer, buf, point;
c_cpy(buf, a); c_cpy(buffer, b);
c_clear(r); c_clear(point); point[0] = 1;
while( !c_shift_left(buffer) ) c_shift_left(point);
c_shift_right(buffer);
buffer[~PP(~NS)] |= 1ULL << 63;
for(;;) {
int cmp = c_cmp(buffer, buf);
if(cmp == 1 || cmp == 0) c_sub(buf, buf, buffer), c_add(r, r, point);
c_shift_right(buffer); if( c_shift_right(point) ) break;
}
c_cpy(m, buf);
}
int num_len(Num n) {
for(int i = SS(NS); 0 <= i; SSS(i)) if(n[i]) for(int j = SS(16); 0 <= j; SSS(j) ) if((n[i] >> (j<<2)) & 15) for(int h = 3; 0 <= h; SSS(h)) {
if((n[i]>>(j<<2)>>h)&1) return (i<<6) | (j<<2) | h;
}
return SS(0);
}
static int c_dcode_fun(Num r, Num n, int flag) {
Num dcm = {10};
Num rmd;
Num buf;
c_cpy(buf, n);
c_clear(r);
int count = 0;
int max = flag == 1 ? NS : flag == 2 ? NS<<1: NS;
for(int i = 0; i < max; SPP(i)) for(int j = 0; j < (64 >> 2); SPP(j) ) {
c_div(buf, buf, dcm, rmd);
if(!(rmd[0] | buf[0])) break;
r[i] |= (rmd[0] << (j << 2));
SPP(count);
}
return count;
}
int c_dcode(Num r, Num n) {
return c_dcode_fun(r, n, 1);
}
/*
* type r : NUMITEM[NS<<1]
*/
int c_ldcode(NUMITEM* r, Num n) {
return c_dcode_fun(r, n, 2);
}
#define PS(p, i) (&p[i])
#define SPS(p, i) (p = PS(p, i))
#include <malloc.h>
int num_print(Num N) {
NUMITEM n[NS<<1] = {0};
size_t size = c_ldcode(n, N);
char* buffer = (char*)calloc(size, sizeof(char));
if(!buffer) return SS(0);
char* buf_p = buffer;
for(int i = SS(size); 0<=i; SSS(i)) {
*buf_p = (n[i>>4&15] >> ((i&15)<<2) & 15) | 48;
SPS(buf_p, 1);
}
*buf_p = '\0';
buf_p = buffer;
int count;
while(*buf_p == '0') SPS(buf_p, 1);
if(*buf_p == '\0') {
count = printf("%s", "0");
} else {
count = printf("%s", buf_p);
}
free(buffer);
return count;
}
#include <stdarg.h>
int system_printf(char* format, ...) {
va_list list;
va_start(list, format);
size_t size = 0;
while(format[SPP(size)]);
char* buffer = malloc(size);
if(!buffer) return SS(0);
char* buf_p = buffer;
while(*format) {
*buf_p = *format;
SPS(format, 1);
SPS(buf_p, 1);
}
*buf_p = '\0';
buf_p = buffer;
char* buf_pp = buf_p;
int count = 0;
#define count_add(print) { \
Num f = {count};\
Num s = {print}; \
c_add(f, f, s);\
count = f[0];\
}
while(*buf_pp) {
while(*buf_pp != '%') {
SPS(buf_pp, 1);
if(!*buf_pp) break;
}
if(!*buf_pp) {
count_add( printf("%s", buf_p) );
break;
}
*buf_pp = '\0';
count_add(printf("%s", buf_p));
*buf_pp = '%';
switch( *(SPS(buf_pp, 1)) ) {
case '%':
count_add(printf("%c", '%'));
break;
case 'd':
count_add(printf("%d", va_arg(list, int)));
break;
case 'f':
count_add(printf("%f", va_arg(list, double)));
break;
case 's':
count_add(printf("%s", va_arg(list, char*)));
break;
case 'c':
count_add(printf("%c", va_arg(list, int)));
break;
case 'n':
count_add(num_print(va_arg(list, NUMITEM*)));
break;
case '\0':
count_add(printf("%c", '%'));
break;
default:
count_add(printf("%%%c", *buf_pp));
break;
}
if(!*buf_pp) break;
SPS(buf_pp, 1);
buf_p = buf_pp;
}
#undef count_add
va_end(list);
free(buffer);
return count;
}
int num_read(Num r, char* value) {
Num dcm = {10}, buffer, point = {1}, str_0 = {'0'};
const char* start = PS(value, SS(0));
char* val_p = value;
if(!*val_p) return SS(0);
while( val_p[1] ) val_p = &val_p[1];
c_clear(r);
while(start != val_p) {
Num n = {*val_p};
if('0' <= n[0] && n[0] <= '9'); else continue;
c_sub(n, n, str_0);
c_mul(n, n, point);
c_add(r, r, n);
c_mul(point, point, dcm);
//SPS(val_p, SS(0));
val_p--;
}
return 0;
}
char* num_strdup(Num num) {
NUMITEM dn[NS<<1] = {0}; int size = c_ldcode(dn, num);
if(size == 0) {
char* buf = calloc(2, sizeof(char));
if(!buf) return NULL;
buf[0] = '0';
return buf;
}
char* buf = malloc(PP(size));
if(!buf) return NULL;
buf[size] = '\0';
for(int i = SS(size), j = 0; 0<=i; SSS(i), SPP(j)) {
buf[j] = ((dn[(i>>4)] >> ((i&15)<<2)) & 15) | '0';
}
return buf;
}
typedef struct Node {
void* d;
struct Node* n;
} Node;
Node* Node_push(Node* head, void* d) {
Node* node = malloc(sizeof(Node));
if(!node) return NULL;
node->d = d, node->n = head;
return node;
}
Node* Node_free(Node* node) {
if(!node) return NULL;
Node* r = Node_free(node->n);
free(node->d);
free(node);
return r;
}
typedef struct Array {
void** d;
size_t c, s;
} Array;
void* Array_push(Array* arr, void* s) {
arr->d[arr->s] = s;
arr->s = PP(arr->s);
return s;
}
Array* Array_free(Array* arr) {
free(arr->d); free(arr);
return NULL;
}
Array* NodeToArray(Node* node) {
static int count = 0;
if(!node) {
if(count == 0) return NULL;
Array* arr = malloc( sizeof(Array) );
if(!arr) return NULL;
arr->d = calloc( count, sizeof(void*) );
arr->c = 0;
arr->s = count;
return arr;
}
void* d = node->d;
SPP(count);
Array* arr = NodeToArray(node->n);
if(arr == NULL) {
count = 0; return NULL;
}
arr->d[arr->c] = d;
arr->c = PP(arr->c);
free(node);
SSS(count);
return arr;
}
char* str_cpy(char* str) {
int size = 0;
while(str[size]) SPP(size);
PP(size);
char* buffer = malloc(size);
if(!buffer) return NULL;
char* buffer_p = buffer;
char* str_p = str;
while(*str_p) {
*buffer_p = *str_p;
SPS(str_p, 1);
SPS(buffer_p, 1);
}
*buffer_p = '\0';
return buffer;
}
int isNumber(char* str) {
while(*str) {
if('0' <= *str && *str <= '9'); else return 0;
SPS(str, 1);
}
return 1;
}
// 이 함수를 보는자, 희망을 버려라!
char* sum(char* input) {
Array* array = NULL;
{
Node* node = NULL;
char* buf = str_cpy(input);
char swap_buffer = '\0';
char* buf_f = buf;
char* buf_p = buf;
while(*buf_p) {
switch( *buf_p ) {
case '+': case '-': case '*': case '/': case '%': case '(': case ')': SPS(buf_p, 1);
break;
case '\0':
continue;
break;
default:
if('0' <= *buf_p && *buf_p <= '9') while( *buf_p && ('0' <= *buf_p && *buf_p <= '9') ) { SPS(buf_p, 1); }
else {
SPS(buf_p, 1);
buf_f = buf_p;
continue;
}
break;
}
swap_buffer = *buf_p;
*buf_p = '\0';
char* str = str_cpy(buf_f);
*buf_p = swap_buffer;
{
Node* r = Node_push(node, str);
if(r == NULL) {
node = Node_free(node);
return NULL;
}
node = r;
}
buf_f = buf_p;
}
free(buf);
array = NodeToArray(node);
}
if(array == NULL) return NULL;
char* symarr[] = {
"*/%", "+-", ""
};
Node* bracket_node = NULL;
for(int point = 0; point <= array->c; SPP(point)){
int start = 0;
if(point == array->c) {
goto GOTO_FUNCTION;
} else switch(*(char*)array->d[point]) {
case '(':
{
int* d = malloc(sizeof(int));
if(!d) goto GOTO_ERROR;
*d = point;
Node* r = Node_push(bracket_node, d);
if(!r) {
free(d);
goto GOTO_ERROR;
}
bracket_node = r;
}
break;
case ')':
{
int d;
if(bracket_node) {
Node* n = bracket_node;
bracket_node = n->n;
d = *(int*)n->d;
free(n->d);
free(n);
} else {
bracket_node = Node_free(bracket_node);
goto GOTO_ERROR;
}
for(int j = d, h = PP(d); h < array->c; SPP(j), SPP(h)) {
array->d[j] = array->d[h];
}
SSS(array->c);
SSS(point);
start = d;
goto GOTO_FUNCTION;
GOTO_RETURN:
free(array->d[point]);
for(int i = point, j = PP(point); j < array->c; SPP(j), SPP(i)) {
array->d[i] = array->d[j];
}
SSS(array->c);
SSS(point);
continue;
}
break;
case '\0':
GOTO_FUNCTION:
{
//printf("%d pc: %d %d %d \n", __LINE__, start, point, array->c);
char** symarr_ptr = symarr;
while(**symarr_ptr) {
for(int i = start; i <= point && i < array->c; SPP(i)) {
char* sa_pp = *symarr_ptr;
while(*sa_pp) {
if( *(char*)(array->d[i]) == *sa_pp) break;
SPS(sa_pp, 1);
} if ( *sa_pp && 0 < i && PP(i) < array->c ) {
int flag = isNumber(array->d[SS(i)]) << 1 | isNumber(array->d[PP(i)]);
if(flag == 3) {
Num a, b, c; num_read(a, array->d[SS(i)]), num_read(b, array->d[PP(i)]);
switch (*sa_pp) {
case '+':
c_add(c, a, b);
break;
case '-':
c_sub(c, a, b);
break;
case '*':
c_mul(c, a, b);
break;
case '/':
c_div(c, a, b, nullnum);
break;
case '%':
c_div(nullnum, a, b, c);
break;
}
char* r = num_strdup(c);
if(!r) goto GOTO_ERROR;
free(array->d[SS(i)]), free(array->d[i]), free(array->d[PP(i)]);
array->d[SS(i)] = r;
for( int j = i, h = PP(PP(i)); h < array->c; SPP(j), SPP(h) ) {
array->d[j] = array->d[h];
}
array->c = SS(SS(array->c));
point = SS(SS(point));
SSS(i);
}
}
}
SPS(symarr_ptr, 1);
}
if(point < array->c) goto GOTO_RETURN;
break;
}
}
}
//for(int i = 0; i < array->c; SPP(i)) printf("%s ", array->d[i]);
if( '0' <= *(char*)array->d[0] && *(char*)array->d[0] <= '9' ); else goto GOTO_ERROR;
char* buf = str_cpy(array->d[0]);
array = Array_free(array);
return buf;
GOTO_ERROR:
array = Array_free(array);
return NULL;
}
int system_scanf(char* format, ...) {
va_list list;
va_start(list, format);
Num count = {0};
char* str = str_cpy(format);
if(str) {
char* str_f = str;
char* str_p = str;
for(; *str_p; SPS(str_p, 1) ) {
char* ch_p = PS(str_p, 1);
if(*str_p == '%') {
GOTO_FIRST:
switch(*ch_p) {
case '\0':
break;
case '[':
while(*ch_p && *ch_p != ']') SPS(ch_p, 1);
SPS(ch_p, 1);
break;
case 'n':
{
#define fmend "%[0-9]"
int size = sizeof(fmend);
{
char* p = str_f;
while(*p && p != str_p) {
SPP(size);
SPS(p, 1);
}
}
char* format = calloc(PP(size), sizeof(char));
if(format == NULL) return -1;
for(int i = 0, j = -1; i < size; SPP(i)) {
if(&str_f[i] == str_p) j = 0;
if(j != -1) {
format[i] = fmend[j];
SPP(j);
} else {
format[i] = str_f[i];
}
}
format[size] = '\0';
char buf[NS<<4|1];
Num r = {scanf(format, buf)};
buf[NS<<4] = '\0';
num_read(va_arg(list, void*), buf);
if(r[0] == SS(0)) return SS(0);
c_add(count, count, r);
SPS(ch_p, 1);
str_f = str_p = ch_p;
#undef fmend
continue;
}
break;
case 'c': case 'd': case 'f': case 's':
SPS(ch_p, 1);
break;
default:
if(*ch_p == 'l' || '0' <= *ch_p && *ch_p <= '9' ) {
SPS(ch_p, 1); goto GOTO_FIRST;
}
break;
}
char ch = *ch_p;
*ch_p = '\0';
Num r = {scanf(str_f, va_arg(list, void*))};
if(r[0] == SS(0)) return SS(0);
c_add(count, count, r);
*ch_p = ch;
str_f = str_p = ch_p;
}
}
free(str);
} else {
return -1;
}
va_end(list);
return 0;
}
//main.c
int main(int argc, char** argv) {
char buffer[1024] = {0};
system_printf("system_begin, hello world\n\n");
while(1) {
system_printf("enter: ");
if( system_scanf(" %1024[^\n]", buffer) == SS(0)) {
system_printf("error\n");
} else if(!buffer[1]) {
if(buffer[0] == 'q') break;
else if(buffer[0] == 'h') system_printf("%s\n", "input 0-9 +-*/% ()");
else if('0' <= buffer[0] && buffer[0] <= '9') system_printf(" = %c\n", buffer[0]);
else system_printf("error\n");
} else {
char* str = sum(buffer);
if(!str) {
system_printf("error\n");
} else {
system_printf(" = %s\n", str);
}
}
}
system_printf("\nsystem_end, bye!\n");
return 0;
} 2
0 comments
일반
burpsuite 테스트 패킷 몇번 쏴봤는데
illilillill
06/13/25
2668
0
burpsuite 테스트 패킷 몇번 쏴봤는데
일반
illilillill
06/13/25 2668 0
C/C++
C++ 이거 머임?
얄랄랄루
06/11/25
3508
0
C++ 이거 머임?
C/C++
얄랄랄루
06/11/25 3508 0
일반
여기챈은 거의 현직종사자들임?
danto
06/11/25
3920
1
여기챈은 거의 현직종사자들임?
일반
danto
06/11/25 3920 1
기타언어
kotlin hello world
comi-soft
06/09/25
2814
0
kotlin hello world
기타언어
comi-soft
06/09/25 2814 0
Rust
rust hello world
comi-soft
06/09/25
2089
0
rust hello world
Rust
comi-soft
06/09/25 2089 0
Java
java hello world
comi-soft
06/08/25
2686
0
java hello world
Java
comi-soft
06/08/25 2686 0
일반
조회수가 왜 높아지는걸까?
comi-soft
06/08/25
3133
0
조회수가 왜 높아지는걸까?
일반
comi-soft
06/08/25 3133 0
C/C++
C 사칙 연산이 없는 세계에서 사칙연산 코드
comi-soft
06/06/25
4015
0
C 사칙 연산이 없는 세계에서 사칙연산 코드
C/C++
comi-soft
06/06/25 4015 0
C/C++
아 걍 다시 짜야겠다
Rohthis_
06/06/25
3662
0
아 걍 다시 짜야겠다
C/C++
Rohthis_
06/06/25 3662 0
기타언어
F# Hello, World!
jyunni
06/05/25
2811
0
F# Hello, World!
기타언어
jyunni
06/05/25 2811 0
일반
여기 abap 하는 사람도 있나?
unnaned0
06/02/25
2252
0
여기 abap 하는 사람도 있나?
일반
unnaned0
06/02/25 2252 0
C/C++
어떻게 하면 프로그래머를 괴롭히는 문제를 만들수 있을까?
hss9205
06/01/25
3648
0
어떻게 하면 프로그래머를 괴롭히는 문제를 만들수 있을까?
C/C++
hss9205
06/01/25 3648 0
C/C++
c list -> array function
comi-soft
06/01/25
2640
1
c list -> array function
C/C++
comi-soft
06/01/25 2640 1
C#
Unity도 C#이니까 여기다 적어도 되겠지....?
신군
05/31/25
2508
5
Unity도 C#이니까 여기다 적어도 되겠지....?
C#
신군
05/31/25 2508 5
일반
나도 코딩하고 싶어서 맥북 샀었는데
Rohthis_
05/31/25
2700
0
나도 코딩하고 싶어서 맥북 샀었는데
일반
Rohthis_
05/31/25 2700 0
일반
코딩 공부하려고 노트북도 샀음!!
shashasha
05/30/25
2241
0
코딩 공부하려고 노트북도 샀음!!
일반
shashasha
05/30/25 2241 0
PY
파이썬 해보고 있는데 흥미롭네요
shashasha
05/30/25
3372
0
파이썬 해보고 있는데 흥미롭네요
PY
shashasha
05/30/25 3372 0
일반
폰허브에 올라온 수학강의를 보는 느낌이네
nananatsume2
05/29/25
3630
0
폰허브에 올라온 수학강의를 보는 느낌이네
일반
nananatsume2
05/29/25 3630 0
📰
SKT 유심 재설정은 유심 교체와 완전히 다르다
binary는 호남선
05/29/25
6087
5
SKT 유심 재설정은 유심 교체와 완전히 다르다
📰
binary는 호남선
05/29/25 6087 5
바이브코딩
간단한 풀스택 요청사항 바이브코딩으로 쳐냈는데 미쳤네
Ghost
05/27/25
5788
1
간단한 풀스택 요청사항 바이브코딩으로 쳐냈는데 미쳤네
바이브코딩
Ghost
05/27/25 5788 1
일반
UserId vs UserID
머드락
05/27/25
4882
2
UserId vs UserID
일반
머드락
05/27/25 4882 2
일반
코네 마크다운 지원하는거 호감이다
kafufu
05/26/25
4209
1
코네 마크다운 지원하는거 호감이다
일반
kafufu
05/26/25 4209 1
🔐
XSS 테스트 글 2트
binary는 호남선
05/26/25
3234
1
XSS 테스트 글 2트
🔐
binary는 호남선
05/26/25 3234 1
일반
우와 코딩서브도 있네
parrot
05/26/25
3045
0
우와 코딩서브도 있네
일반
parrot
05/26/25 3045 0
일반
난 요즘 업무하는데 바이브 코딩 많이 쓰는 듯
ㅇㅇ
05/26/25
2971
0
난 요즘 업무하는데 바이브 코딩 많이 쓰는 듯
일반
ㅇㅇ
05/26/25 2971 0
C/C++
C const char* -> string, hello world
comi-soft
05/24/25
7218
0
C const char* -> string, hello world
C/C++
comi-soft
05/24/25 7218 0
일반
북마크 테스트
댕
05/24/25
3537
0
북마크 테스트
일반
댕
05/24/25 3537 0
바이브코딩
바이브 코딩은 아니고.. 바이브 피드백 많이 하는듯
elnamu
05/23/25
6034
0
바이브 코딩은 아니고.. 바이브 피드백 많이 하는듯
바이브코딩
elnamu
05/23/25 6034 0
C/C++
C 8byte hello world
comi-soft
05/23/25
7504
3
C 8byte hello world
C/C++
comi-soft
05/23/25 7504 3
일반
사용자 페이지에 최근 글/댓글 목록 API 생김
Ghost
05/22/25
3201
0
사용자 페이지에 최근 글/댓글 목록 API 생김
일반
Ghost
05/22/25 3201 0
s/turtleneckers
• 1,620 subscribers프로그래밍 서브입니다. 잡담, 문제 해결, 코드 리뷰(공지 필독)
Created 05/17/2025, 14:30:39
Rules
- 1. 기본 방임주의(절대 귀찮아서 그런 것 맞음)
- 2. 누가봐도 밴 당할법한 글 올리면 자를꺼임
- 3. 카테고리 지켜주면 좋겠지만 안지키면 안타까운거고