C语言局部变量一定在栈区么?

今天同事和我说,如果在51单片机的情况下,这种说法是错的。求求求大神解惑啊?

这个取决于编译器。但是如果局部变量不在堆栈上,这种编程语言要执行递归会很麻烦。不排除你说的特定的编译器(并且其实它只是提供了类似C的语法的子集,而不是标准的C)可能如你的同事说的那样。

编译器决定着C语言局部变量。不过要编程有些繁琐,因为编译器只提供类似C语言的语法,不是标准的C语言,希望能帮到你!

是不是意思说,单片机上面没有堆栈?

堆栈中主要用于存储函数参数,如果寄存器不够多余的函数参数就会压入栈中
函数调用保护现场的数据都存储在堆栈中
运算中的临时变量
函数返回值,寄存器不够用时
局部变量
等都在栈中。