Tôi đã làm việc với một codebase lớn được viết chủ yếu bởi các lập trình viên không còn làm việc tại công ty nữa. Một trong những lập trình viên dường như có một vị trí đặc biệt trong trái tim của mình cho các macro dài rất dài. Lợi ích duy nhất tôi có thể nhìn thấy khi sử dụng macro là có thể viết các hàm không cần phải chuyển qua trong tất cả các tham số của chúng (được đề xuất trong hướng dẫn thực hành tốt nhất mà tôi đã đọc). Khác hơn là tôi thấy không có lợi ích hơn một chức năng nội tuyến.Macro lớn C. Lợi ích là gì?
Một số macro quá phức tạp, tôi khó có thể tưởng tượng được ai đó thậm chí còn viết chúng. Tôi đã cố gắng tạo ra một trong tinh thần đó và đó là một cơn ác mộng. Gỡ lỗi là vô cùng khó khăn, vì phải mất N + dòng mã vào 1 trong trình gỡ rối (ví dụ: có một segfault ở đâu đó trong khối mã lớn này. Chúc may mắn!). Tôi đã thực sự kéo macro ra và chạy nó un-macro-tized để gỡ lỗi nó. Cách duy nhất tôi có thể thấy người viết là bằng cách tự động tạo ra chúng bằng mã được viết trong một hàm sau khi anh ấy đã sửa lỗi (hoặc thông minh hơn tôi và viết nó hoàn hảo lần đầu tiên, điều này luôn luôn có thể tôi đoán) .
Tôi có thiếu gì đó không? Tôi có điên không? Có các thủ thuật gỡ lỗi mà tôi không biết? Xin vui lòng điền vào tôi. Tôi thực sự muốn nghe từ những người yêu thích vĩ mô trong khán giả. :)
Tôi có thể hiểu một số macro ngắn vì những lý do đó, nhưng có bất kỳ lợi ích nào để có chức năng xác thực san bằng được khai báo là macro so với hàm nội tuyến không? Tôi chạy vào rất nhiều lỗi bên trong một số macro X_VALIDATE tại nơi làm việc, nhưng chúng bao gồm nhiều câu lệnh khẳng định và vòng lặp. Một tập tin lõi sẽ không cho tôi biết khẳng định nào đã thất bại (do đó làm cho việc gỡ rối khó khăn hơn). Dường như với tôi điều này có thể là một chức năng nội tuyến mà không mất chi phí và rất nhiều lợi ích. Bạn có đồng ý không? – jdizzle
Lợi ích chính để khẳng định trong macro (thay vì nội tuyến) là __FILE__ và __LINE__ sẽ chính xác. Vì bạn có một lõi, bạn có thể có được toàn bộ ngăn xếp, do đó, không phải là một việc lớn đối với bạn. Nếu nó có thể được viết mà không có macro, hãy thực hiện nó mà không cần macro. Nếu nó chỉ có thể được thực hiện với một vĩ mô và bạn nhận được một lợi ích, sau đó làm điều đó. Đối với tôi, lợi ích cần phải là mã đơn giản hơn nhiều hoặc ít dễ bị lỗi hơn. –
__FILE__ và __LINE__ có nghĩa là '__FILE__' và' __LINE__' ở trên (không biết tôi cần phải thoát) –