I would like to create a static (file scope) table of data pointer, data size and data version. The problem is that the data are in external files, but constants in the extern files.
Example:
file1.c
    const unsigned char data1[] =
    {
    0x65, 0xF0, 0xA8, 0x5F, 0x5F,
    0x5F, 0x5F, 0x31, 0x32, 0x2E,
    0x31, 0xF1, 0x63, 0x4D, 0x43, 
    0x52, 0x45, 0x41, 0x54, 0x45,
    0x44, 0x20, 0x42, 0x59, 0x3A,
    0x20, 0x69, 0x73, 0x70, 0x56, 
// ...
    };
    const unsigned int data1_size =
        sizeof(data1) / sizeof(data1[0]);
    const unsigned int data1_version = 1;
file2.c
    const unsigned char data2[] =
    {
    0x20, 0x44, 0x61, 0x74, 0x61,
    0x20, 0x52, 0x6F, 0x77, 0x20,
    0x3D, 0x20, 0x34, 0x38, 0x12, 
//...
    };
    const unsigned int data2_size =
        sizeof(data2) / sizeof(data2[0]);
    const unsigned int data2_version = 1;
main.c
struct Data_Info
{
  unsigned char * data_ptr;
  unsigned int    data_size;
  unsigned int    data_version;
};
extern const unsigned char data1[];
extern const unsigned int  data1_size;
extern const unsigned int  data1_version;
extern const unsigned char data2[];
extern const unsigned int  data2_size;
extern const unsigned int  data2_version;
static struct Data_Info  Data_Info_Table[] =
{
  // How to set this up??
  // The compiler wants constant expressions here,
  //    and the extern is not considered a constant expression
  // This is what I tried:
  { data1, data1_size, data1_version},
  { data2, data2_size, data2_version},
};
int main(void)
{
  return 0;
} 
I am using Green Hills Compiler, 4.2.3. The exact error message:
error #28, expression must have a constant value.
See my earlier post:
http://stackoverflow.com/questions/2580115/c-external-const-ints-in-a-array-of-const-struct
Note: C++ tag is included since this also applies to C++