В процессе трансляции определенную информацию содержат следующиепредопределенные макроимена. __LINE__ десятичная константа, содержащая номер текущей строки текста программы на С++. __FILE__ строка литералов, представляющая имя транслируемого входного файла. __DATE__ строка литералов, представляющая дату трансляции в виде "Mmm dd yyyy" или "Mmm d yyyy", если число меньше 10, (здесь Mmm задает месяц, dd - день, а yyyy - год). __TIME__ строка литералов, представляющая время трансляции в виде "hh:mm:ss", (здесь hh задает часы, mm - минуты, а ss - секунды). Кроме того, считается определенным при трансляции программы на С++макроимя __cplusplus.Перечисленные макроимена нельзя как переопределять, так и отменять ихопределения.Макроимена __LINE__ и __FILE__ можно определить с помощью команды#line ($$R.16.6).Определено ли макроимя __STDC, и если да, то каково его значение,зависит от реализации.
R.17 Приложение A: Сводка грамматики
Это приложение не относится к справочному руководству языка ине является определением конструкций C++. Она только должно служить более полному пониманию С++. Нельзярассматривать его как точное определение языка, так как описанная здесьграмматика допускает произвольное множество конструкций, каждая изкоторых законна для С++. Чтобы различать выражения и описания,следует применять правила разрешения неопределенности ($$r.6.8,$$R.7.1, $$R.10.1.1). Далее, для отсеивания синтаксически правильных,но бессмысленных, конструкций следует применять правила контролядоступа, разрешения неопределенности и контроля типа.