Группировка дат в Google Graphs с использованием google.visualization.data.group для отображения недели / месяца и т. Д.

Это, по-видимому, (недокументированное) расширение «GNU»: [ correction : Наконец, я нашел упоминание в документах. См. Ниже.]

Следующая команда использует параметр -dM для печати всех препроцессоров; поскольку входной «файл» пуст, он показывает точно предопределенные макросы. Он был запущен с gcc-4.7.3 на стандартной установке ubuntu. Вы можете видеть, что препроцессор является стандартным. Всего существует 243 макроса с -std=gnu99 и 240 с -std=c99; Я отфильтровал вывод для релевантности.

$ cpp --std=c89 -dM < /dev/null | grep linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1

$ cpp --std=gnu89 -dM < /dev/null | grep linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1

$ cpp --std=c99 -dM < /dev/null | grep linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1

$ cpp --std=gnu99 -dM < /dev/null | grep linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1

Стандарты «gnu standard» также #define unix. (Использование c11 и gnu11 дает те же результаты.)

Я полагаю, что у них были свои причины, но мне кажется, что я устанавливаю установку gcc по умолчанию (которая компилирует код C с -std=gnu89 если не указано иное) несоответствия, и - как в этом вопросе - удивительно. Загрязнение глобального пространства имен макросами, имена которых не начинаются с символа подчеркивания, не допускается в соответствии с реализацией. (6.8.10p2: «Любые другие предопределенные имена макросов начинаются с верхнего подчеркивания, за которым следует буква верхнего регистра или второй символ подчеркивания», но, как упоминалось в Приложении J.5 (проблемы с переносимостью), такие имена часто предопределены.)

Когда я изначально написал этот ответ, мне не удалось найти какую-либо документацию в gcc об этой проблеме, но я, наконец, обнаружил ее, а не в C, определяемом реализацией поведения и в расширениях C , но в разделе cpp руководства 3.7.3 , где он отмечает, что:

Мы постепенно прекращаем работу предопределенные макросы, которые находятся за пределами зарезервированного пространства имен. Вы никогда не должны использовать их в новых программах & hellip;

blockquote>

0
задан Shane McDonald 6 March 2019 в 10:16
поделиться