Tôi đang phát với thông số cuộc gọi của ngăn xếp và chức năng. Điều tôi muốn đạt được ở đây là lấy giá trị của các tham số biến trực tiếp bằng cách sử dụng ngăn xếp.Nhận đối số biến trực tiếp từ ngăn xếp
Nó hoạt động (hoặc có vẻ hoạt động) tốt khi tôi không sử dụng các thông số biến. Đây là những gì đang hoạt động:
void test(int a, int b)
{
unsigned char *ptr;
int i;
ptr = (unsigned char*)&a;
for (i = 0; i < 4; i++)
{
printf("%d,", *ptr);
}
}
Công việc đó, tôi có thể lấy giá trị của b; Cùng mã sử dụng
void test(int a, ...);
làm nguyên mẫu của hàm không hoạt động.
Tôi không thể hiểu những gì đang xảy ra ở đây.
Bạn có thể giúp tôi? Cảm ơn!
Chỉnh sửa: Ok, sau đó có vẻ như không có cách nào ổn định và đáng tin cậy để tự mình làm những việc đó. Cho phép nói rằng trong hàm callee tôi biết kích thước dữ liệu (nhưng không phải kiểu) của đối số biến, có cách nào để lấy chúng không?
Behavior Undefined gì bạn đang làm là. Bạn đang cố gắng đạt được điều gì? –
Bạn đang cố gắng lấy các đối số biến như thế nào? Mẹo - stdargs.h, va_start, va_arg, va_end. – arunkumar
@jweyric: Tôi đang sử dụng gcc. Tôi biết tôi có thể sử dụng va_ * macro, nhưng đó là hoàn toàn hết hạn, tôi chỉ đang cố gắng tìm hiểu cách hoạt động: P – Xaqq