C90 не допускает использования дополнительных символов в идентификаторе (по сравнению с базовыми наборами символов), C99 делает (оба с универсальным синтаксисом символов - \ uXXXX и \ UXXXXXXXX - и набор других символов, определяемый реализацией).
6.4.2.1 / 1 в C99:
identifier:
identifier-nondigit
identifier identifier-nondigit
identifier digit
identifier-nondigit:
nondigit
universal-character-name
other implementation-defined characters
nondigit: one of
_ a b c d e f g h i j k l m
n o p q r s t u v w x y z
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
digit: one of
0 1 2 3 4 5 6 7 8 9
Я не знаю, насколько хорошо это поддерживается реализациями C, я знаю, что компилятор Plan9 C может обрабатывать другие символы до того, как оно было стандартизировано.