Remove the parentheses around the string literal. The brackets turn the macro into an expression that will decompose into a pointer type, which makes it not compiled in your C compiler. The initialization type cannot be used to initialize an array. Without parentheses, a string literal is used to initialize the array.
#define PROD_FAMILY_NAME "product name goes here"
The C standard states that the expression in parentheses is of the same type as the unexpressed expression, C.99 & sect; 6.5.1? 5:
The expression in parentheses is the main expression. Its type and meaning are identical to type and uneven expression. This value is an lvalue, a function designation, or a void expression, if the non-common expression is, respectively, an lvalue, a function designation or void.
However, although a string literal is an expression, the converse is not true. In particular, a string literal itself is not a type, but a specific object. The initialization of arrays gives a specific value for the string literal, C.99 & sect; 6.7.8 and para; fourteen:
A character type array can be initialized with a character string literal , optionally enclosed in braces.
Other valid initializers for the array are described in C.99, section 6.7.8 and para.16:
Otherwise, the initializer for an object that is of type aggregate or union must be a closed list of initializers for elements or named members.
The expression in parentheses is not a string literal, nor is it a copied list of initializers.