Khởi tạo mảng với phần tử phụ bằng cách sử dụng macro


8

Tôi đang khởi tạo một mảng theo hai cách khác nhau tùy thuộc vào macro:

# if feature_enabled
const int v[4] = {1, 2, 3, 4};
#else
const int v[5] = {0, 1, 2, 3, 4};
#endif

Vấn đề là dữ liệu trong bài tập thực sự là ma trận lớn và vì nhiều lý do khác nhau, đó không phải là một giải pháp tốt để chỉ sao chép dữ liệu với một sửa đổi nhỏ (chỉ thêm một phần tử ở đầu mảng.)

Tôi đã tự hỏi nếu có một cách để làm điều tương tự mà tôi đã làm ở đây, mà không cần sao chép các yếu tố n-1 cuối cùng.


6
Bạn có biết rằng kích thước mảng không khớp với số lượng phần tử trong danh sách khởi tạo không?
mch

@mch đã sửa nó ngay, nó chỉ là thứ tôi gõ cho câu hỏi.
CE

@CE "và vì nhiều lý do, đó không phải là một giải pháp tốt để chỉ sao chép dữ liệu với một sửa đổi nhỏ" - Bạn có thể cho chúng tôi tham khảo về điều đó, bạn lo lắng về điều gì?
RobertS hỗ trợ Monica Cellio

@ RobertS-ReinstateMonica Tại sao, nói chung, sao chép mã là xấu? Đó là một chủ đề khá rộng. May mắn thay, tôi đã nhận được câu trả lời của tôi.
CE

@CE Bạn không cần phải giải thích quá chi tiết, mọi thứ sẽ ổn nếu bạn có thể đưa ra một tài liệu tham khảo ít nhất cho những gì bạn đang chỉ và đó là cơ sở của câu hỏi đó. Vì vậy, những người đã xác nhận với những điều này có thể hiểu mục đích của câu hỏi đó.
RobertS hỗ trợ Monica Cellio

Câu trả lời:


16

Nếu bạn không chỉ định kích thước trên mảng nhưng để tự động suy ra, bạn chỉ cần thêm 0 ở phía trước một cách có điều kiện:

const int v[] = {
# if feature_enabled
  0,
#endif
  1, 2, 3, 4
};

3

Nếu bạn cần giữ kích thước mảng, thì:

# if feature_enabled
const int v[4] = {
#else
const int v[5] = {0,
#endif
  1, 2, 3, 4
};
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.