Node* binarySearchTree::search(Node* root, int value){
if (root == nullptr || value == root->key) return root;
if (value < root->key) return search(root->left, value);
else return search(root->right, value);
}
Node* binarySearchTree::search(Node* root, int value){
if (root == nullptr || value == root->key) return root;
if (value < root->key) search(root->left, value);
else search(root->right, value);
}
두 코드는 아예 다른 결과임?
chatgpt가 return 붙여야한다길래
Node* 리턴해야되는데 리턴문 안쓰면 저거 뭐 리턴하노...
계속 호출해서 들어가다가다 마지막 if (root == nullptr || value == root->key) return root;에서 리턴하는 거 아니나
그 리턴한걸 받아서 다시 리턴해줘야되는데
컴파일러가 경고 오지게할텐데 저건
아 뭔말인지 알겠다 계속 차곡차곡 리턴값이 전달되야하는데 마지막에만 하고 있다는 거네
그렇지...
두번 호출되고 리턴됐다고 하자 체인을 main-f1-f2라고 하면 f2-f1은 리턴 시켜줄텐데 f1-main으로는 아무것도 전달이안됨
근데 왜 결과는 잘 나오지, 컴파일러가 대충 이해하고 해준건가
일단 경고가 왕창 떴을거고... 리턴을 안 하면 일반적으로 rax에 있는 값이 리턴값이 될 텐데 그걸 안 건드리고 나오면 마지막으로 리턴된 값이 리턴되는 것처럼 보이는 거. UB일 것 같은데 레퍼를 못 찾겠네...
UB네. [stmt.return] "*Otherwise, flowing off the end of a function that is neither main ([basic.start.main]) nor a coroutine ([dcl.fct.def.coroutine]) results in undefined behavior."
지피티가 맞말했네
애초에 후자는 ub인데요