2014-11-02 11 views
6

Tôi đang sử dụng một macro được định nghĩa trong tập tin nguồn giống như:Compiler phàn nàn của biến chưa được khai báo trong một macro

#define MY_MACRO (a, b,...) (...) 

vĩ mô đang được sử dụng sau này trong các tập tin.

Tuy nhiên, trình biên dịch phàn nàn:

lỗi: không khai báo (sử dụng lần đầu trong hàm này).

Thật kỳ lạ .. Tôi có thiếu điều gì đó hiển nhiên không?

+3

Vui lòng hiển thị ví dụ tối thiểu. – 2501

+3

Nếu bạn muốn macro chức năng, dấu ngoặc đơn cho danh sách đối số phải theo tên macro ngay lập tức, không có dấu cách. Như là, bạn đã định nghĩa một sự thay thế đơn giản trong đó 'MY_MACRO' được mở rộng thành' (a, b, ...) (...) ', có thể không phải là những gì bạn muốn Bạn có thể chạy trình biên dịch bằng một công tắc ('-E' trong gcc) để hiển thị đầu ra được xử lý trước để giúp bạn theo dõi các vấn đề như vậy. –

+0

@MOehm: đây là nó! Cảm ơn bạn! – Iceman

Trả lời

12

Tôi nghĩ rằng vấn đề là có khoảng cách giữa MY_MACRO(a, b, ...). Cần phải như sau:

#define MY_MACRO(a, b,...) (...) 
5

Xóa khoảng trống giữa tên macro và danh sách đối số. Không gian tách đầu macro khỏi phần thân, do đó, nó được coi là macro không có đối số mở rộng vào danh sách đối số mong muốn theo sau là phần thân bạn muốn.

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