У меня есть сомнения в самых основах C.Может кто-то прояснить этот код?
- Я написал следующий код. Здесь, в функции
add()
, я ничего не возвращаю и поэтому ожидал, что выход будет какой-то ненужной или что-то вроде этого, но это не произошло. Может ли кто-нибудь объяснить мне, почему это так происходит? Пожалуйста, извините меня, если я написал что-то неправильно в коде. - Насколько я понимаю, я думал, что память для переменной
add1
будет из стека, и, как только будет выполненаadd()
, вся выделенная память будет освобождена, поэтому будет отображаться некоторое значение нежелательной почты. - Мое ясное сомнение не возвращает ничего, как он может напечатать правильное значение?
Пример кода:
main() {
int x = 4, sum;
int n;
printf(" enter a number \n");
scanf("%d", &n);
sum = add(x, n);
printf(" total sum = %d\n", sum);
}
add(int x, int n) {
int add1 = 0;
add1 = x + n;
//return(add1);
}
Это неопределенное поведение. На самом деле не очень эффективно пытаться понять, что происходит. Какое бы поведение вы ни видели, не предсказуемо - оно может меняться в зависимости от ОС, компилятора, другого (даже несвязанного) кода в программе и т. Д. – kaylum
какой компилятор используется? gcc не удается скомпилировать этот код ошибка: ISO C++ запрещает объявление «добавить» без типа [-fpermissive] – Evgeniy
@Evgeniy: Бесполезно указывать, что делает другой язык. C не является C++, а не C. – Olaf