2011-11-13 53 views
5

Tôi đang sử dụng các macro như được đề cập bên dưới trong chương trình C để phát triển ứng dụng POS. Khi tôi biên dịch mã này, tôi bị lỗi \ '\' trong lỗi chương trình. Bất cứ ai có thể giúp tôi trong việc giải quyết này?bị lỗi '' trong lỗi chương trình khi biên dịch

#define FF(a, b, c, d, x, s, ac) \ 
    {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ 
    (a) = ROTATE_LEFT ((a), (s)); \ 
    (a) += (b); \ 

     } 
+0

Thông báo lỗi phải đề cập đến số dòng. Liệu nó trỏ đến định nghĩa macro (và nếu có, dòng nào), hoặc để gọi macro? Gọi như thế nào? Bạn có thể cho chúng tôi thấy một tệp nguồn hoàn chỉnh nhỏ thể hiện sự cố không? Mỗi '\' ở cuối dòng, không có dấu cách trắng? (Các biên dịch trên không có lỗi đối với tôi.) –

+3

@itsnikki - Bạn không nên sửa mã trong câu hỏi sau khi tìm ra giải pháp, vì điều đó làm cho câu trả lời trông vui nhộn. –

+0

@BoPersson: Theo nhận xét của OP, dòng trống không có trong mã gây ra sự cố - và với dòng trống, nó có thể sẽ không tạo ra thông báo lỗi đó. –

Trả lời

7

Xóa đường trước khung đóng.

(a) += (b); \ 
      <---- 
} 

Ngoài ra, như một vấn đề về phong cách, bạn nên ít nhất là xếp hàng các dấu gạch chéo ngược.

+0

thats có thể không phải là vấn đề .. Trên thực tế rằng dòng đã được thêm vào đây chỉ .. không có không gian trong mã. – itsnikki

+0

@itsnikki Tôi vừa dành thời gian để chạy mã. Nó biên dịch khi bạn loại bỏ dòng đó. Có lẽ lỗi ở đâu đó? – cnicutar

3

Hầu hết các trình biên dịch cung cấp cho bạn một số cách để có được hình thức tiền xử lý mã của bạn. Với gcc, nó là gcc -C -E source.c > source.i; bạn nên nhìn vào biểu mẫu đó. Dưới Linux, đôi khi tôi thực hiện:

gcc -C -E source.c | grep -v '^#' | indent > source.i 
gcc -Wall -c source.i 

grep -v '^#' sẽ xóa số dòng được tạo. Sau đó, tôi nhìn vào source.i tại các vị trí lỗi và tôi hiểu những gì đã sai với các macro của tôi.

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