• Any function can modify them. Rules imposed on a global variable can be easily forgotten.
• Threading. They are not thread-safe. Since any function can access them, synchronization becomes problematic, especially when multiple translation units attempt to modify it.
• Dependency. A part of a program may depend on its use, and modification or removal of the variable could cause compilation of the program to fail.
The only problem you could get with global constants is flooding the global namespace. The names you pick for the global constants could conflict with other variables elsewhere in your code, and if it's spelt similarly to another variable you could mistake one for the other introducing a subtle bug. Naming conventions (like capitalising all global constants or prefixing them with "g_" ) and enclosing constants in a namespace can help against this.