Hello,
Further to Daniel's explanation - the general rule would appear to be that, for a definition (something that generates code, or allocates memory), this can only occur once, and it is safer for this to be within a single .c file, and not a header file. However, for a declaration (that does not allocate any memory), this is suitable for a header file.
static const Byte table1[] = {0x00, 0x01};
clearly allocates memory, whereas the declaration
extern const Byte table1[];
does not allocate any memory.
Within the CW IDE, after a compile, if you see that a header file has a non-zero value for code or memory requirements, it is a good idea to investigate further to try and eliminate any future potential problems with multiple includes.
Another potential issue with your code might be the use of the Byte typedef (or macro). Obviously, the file in which table[] is defined should already know about the typedef. However, this is not necessarily the case for another file that simply requires to use values from the table.
Therefore, any header file that uses the typedef should also include the header file that defines the typedef, or might alternatively incorporate (assuming a typedef rather than a macro) -
#ifndef Byte
typedef unsigned char Byte;
#endif
Regards,
Mac