Is this supposed to be an array of string constants? If so, then the best solution would be to define them inline in a header file:
Code:
inline const char strings[][64] = {
"One",
"Two",
"Three"
};
then include this header file in each of the source files that need this array of string constants. You would need to compile with respect to C++17 or later though.
If this really is an array of string variables instead, then I would ask you to re-consider if you really need such global state. If you do, you can still take the above approach, though an unwary reader might mistake them as constants, so there might still be some benefit to using the old extern approach with the calculated size as john.c suggested (or maybe you can warn the unwary reader by writing a comment to explain the global state).
EDIT:
If you want to do it that way though, I would suggest a modern C++ alternative:
Code:
inline std::array<char[64], 3> strings{
"One",
"Two",
"Three"
};
Again, because of the inline variable, this requires C++17 or later, but this has the advantage of strongly associating the size with what it is the size of (i.e., strings.size()), while thanks to inlining there should be no function call penalty. It also has the advantage of a compile error should you increase the number of elements in the initialiser while forgetting to update the size, whereas with a macro this mistake could pass silently at compile time.