여기에 스택을 인스턴스화하고 포인터를 반환해야하는 함수 get_stack
이 있지만 여기에는 없습니다. 그러나 프로그램은 스택을 계속 업데이트합니다.함수는 return 문 없이도 의도 한 값을 반환합니다.
#include <stdio.h>
#include <stdlib.h>
#define STACKLIM 1000
struct stack {
char data[STACKLIM];
int top;
};
typedef struct stack* Stack;
Stack get_stack() {
Stack s = (Stack)(malloc(sizeof(struct stack)));
s->top = -1;
//return s;
}
void push(Stack s, char val) {
if(s->top == STACKLIM) {
printf("ERROR: Stack Overflow\n");
}
else {
s->top += 1;
s->data[s->top] = val;
}
}
void display(Stack s) {
int i;
printf("Stack -> ");
for(i = 0; i <= s->top; i++) {
printf("%c ", s->data[i]);
}
printf("\n");
}
int main() {
Stack d = NULL;
d = get_stack();
push(d, 'a');
display(d);
return 0;
}
반환 문장은 중요하지 않습니다. 이것에 대한 이유는 무엇일까요? RH5 시스템에서 gcc 4.5.2를 사용하고 있습니다.
'-Wall'로 컴파일하면 어떻게됩니까? 또한이 링크를보십시오 : http://stackoverflow.com/questions/10079089/implicit-int-return-value-of-c-function – AntonH
최적화 플래그를 사용하고 있습니까? 정의되지 않은 동작은 프로그램을 신비하게 작동시키는 것을 포함합니다. – hugomg
'-Wall'로 컴파일 할 때,'warning : 제어가 비공유 함수의 끝에 도달 함'을 얻었지만 프로그램은 아무런 문제없이 여전히 실행됩니다. – Unos