簡體   English   中英

使用C中的宏初始化未知大小的2D數組

[英]Initialize a 2D array of unknown size using macros in C

我正在研究一個小的宏項目,它要求我將二維數組文字傳遞給我的一個宏,如: myMacro({{0, 1, 2}, {2, 1, 0}}) 無需將數組文字的大小傳遞給宏,是否可以將其擴展為以下內容: int[2][3] = { {0, 1, 2}, {2, 1, 0} }或東西等效(即保留了陣列的形狀的任何初始化將工作)? 在此先感謝您的幫助

#include <boost/preprocessor/tuple/size.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>
#include <boost/preprocessor/seq/for_each.hpp>

#define VA(...) __VA_ARGS__
#define TRANS(r, data, elem) { VA elem},

#define myMacro(name, arg)\
    int name[BOOST_PP_TUPLE_SIZE(arg)][BOOST_PP_TUPLE_SIZE(BOOST_PP_TUPLE_ELEM(0,arg))] = \
    { BOOST_PP_SEQ_FOR_EACH(TRANS, , BOOST_PP_VARIADIC_TO_SEQ arg)}

int main(){
    myMacro(a, ((1,2,3),(4,5,6)) );//=>int a[2][3] = { { 1,2,3}, { 4,5,6}, };
    return 0;
}

如果您有第二個維度的上限,那么您可以使用sentinel值,例如:

#include <stdio.h>

#define MAXCOLUMNS 20
#define VALUE {{0,1,2,-1},{2,3,4,-1},{0,0,0,0,1,-1},{-1}}

int main()
{
  int v[][MAXCOLUMNS] = VALUE;
  int x, y;

  for (y = 0; v[y][0] != -1; y++)
    for (x = 0; v[y][x] != -1; x++)
      printf("[%d,%d] = %d\n", x, y, v[y][x]);

  return 0;
}

這將在不事先知道確切尺寸的情況下打印出值。 這是你想要實現的嗎?

編輯:@ BLUEPIXYs解決方案不需要知道或猜測最大尺寸,另一方面,這適用於較舊的C版本(不過是一個大問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM