2010-02-15 35 views
16

Tôi vừa tìm thấy định nghĩa chức năng này trong một số mã nhúng:từ khóa tĩnh trong tham số chức năng

float round_float_to_4(static float inputval); 

Tôi quen thuộc với các ứng dụng khác cho tĩnh (biến toàn cục, chức năng và các biến địa phương), nhưng đây là lần đầu tiên tôi xem nó như là specifier cho tham số function. Tôi giả sử rằng trình biên dịch lực lượng này sử dụng vị trí bộ nhớ cố định cho inputval thay vì ngăn xếp?

+0

Trong gcc tôi nhận được 'lỗi: lớp lưu trữ theo quy định cho tham số x'. – kennytm

Trả lời

11

Đây không phải là tiêu chuẩn. Tôi đoán điều tương tự như bạn, và tôi không ngạc nhiên về việc mở rộng như vậy trong các trình biên dịch có một mục tiêu được nhúng.

+3

Bạn nói đúng. Tôi đã kiểm tra hướng dẫn của trình biên dịch (Microchip C18) và tìm thấy điều này: "Các tham số chức năng có thể có lớp lưu trữ tự động hoặc tĩnh. Một tham số tự động được đặt trên ngăn xếp phần mềm, cho phép reentrancy. mã. " – Josip

4

Điều đó không hợp lệ. Các chỉ diễn ra hợp lệ nơi static có thể được sử dụng trong một số chức năng tôi biết là trong một chiều mảng

float round_float_to_4(float inputval[static 4]); 

Nói rằng inputval sẽ, trong tất cả các cuộc gọi đến chức năng này, điểm đến bộ nhớ cung cấp ít nhất 4 nổi (đây là một bổ sung C99, nó không xuất hiện trong C89).

+1

@KennyTM, vâng, có nghĩa là khai báo tham số tương đương với 'int * const y': Vì vậy, nó thay đổi tiêu chuẩn toplevel. Tuy nhiên, '4' không có' tĩnh', không có ý nghĩa thực sự trong lần này. –

1

Nhiều thiết bị nhúng có ngăn xếp giới hạn nghiêm trọng, tính năng này sẽ mang lại lợi ích to lớn trong việc giảm nguy cơ tràn ngăn xếp, trong khi vẫn cung cấp cho bạn cơ hội lấy lại mã.

Các chip nhỏ hơn không có bất kỳ cơ hội nào để đặt các biến trên ngăn xếp, vì vậy tất cả các tham số đều là vị trí bộ nhớ ngầm.

2

Theo tiêu chuẩn C,

The only storage-class specifier that shall occur in a parameter declaration is register.

Các vấn đề liên quan