There's really no win to this.  You might just as well inline it in the one place it's used.  The compiler shall then generate an implicit <code>
static const char anonymous[] = "public";
</code> whose address it'll use there, in place of the literal, where you're using pub_passphrase.  The one difference is that you won't need the (void *) cast because string literals formally have type char*, despite being read-only, so you won't technically be casting away const-ness, so won't need the cast at all.

Note that the compiler is entitled to conflate identical string literals, so that inlining priv_passphrase's value in both places it's used would actually work identically to the way you've forced using priv_passphrase; with the difference that such a compiler (or, rather, its linker) could also do the same for the other compilation units that use an identical literal, where you're insisting on one literal per compilation unit.