Is someone able to explain why `_variable$2` is a valid C programming identifier? 

Based on the [ISO documentation](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) as well as a number of online supporting (credible) sources, I thought that only letters, digits and the `_` (underscore) characters were allowed. 

However variable names such as `_variable$2` are completely valid and run as normal when compiled and tested. And if this is the case, what other special characters can and cannot be used similarly? Is this limited to simply characters or could even emoji's be substituted into valid identifier names within the C programming language? Any help would be appreciated :)