Существуют встроенные (заранее определенные) макроимена, доступные препроцессору во время обработки. Они позволяют получить следующую информацию:
__DATE__ - строка символов в формате: "месяц число год", определяющая дату начала обработки исходного файла. Например, после препроцессорной обработки текста программы, выполненной 29 января 2005 года, оператор
printf(__DATE__);станет таким
printf("%s", "January 29 2005");__LINE__ - десятичная константа - номер текущей обрабатываемой строки файла с программой на Си. Принято, что номер первой строки исходного файла равен 1;
__FILE__ - строка символов - имя компилируемого файла. Имя изменяется всякий раз, когда препроцессор встречает директиву #include с указанием имени другого файла. Когда включения файла по команде #include завершаются, востанавливается предыдущее значение макроимени __FILE__;
__TIME__ - строка символов вида "часы:минуты:секунды", определяющая время начала обработки препроцессором исходного файла;
__STDC__ - константа, равная 1, если компилятор работает в соответствии с ANSI-стандартом. В противном случае значение микроимени __STDC__ не определено. Стандарт языка Си предполагает, что наличие имени __STDC__ определяется реализацией, так как макрос __STDC__ относится к нововведениям стандарта. В конкретных реализациях набор предопределенных имен гораздо шире. Для получения более полных сведений о предопределенных препроцессорных именах следует обращаться к документации по конкретному компилятору.
Лекция 12. Массивы и указатели
Указатели и массивы. Массивы. Указатели. Динамические объекты. Создание динамических объектов. Доступ к динамическим объектам. Строки - дополнительные сведения о связи между указателями и массивами. Инициализация массивов и классы памяти. Функции. Операции с указателями.
Указатели и массивы
Допустимо бесконечно большое число различных типов указателей и массивов. Далее следуют типовые примеры.
Указатель на основной тип:
char *p;Переменная р является указателем на символ, т.е. этой переменной должен присваиваться адрес символа.
Указатель на указатель:
char **t;Переменная t - указатель на указатель символа.
Одномерный массив:
int a[50];Переменная а - массив из 50 целых чисел.
Двумерный массив:
char m[7][50];Переменная m - массив из семи массивов, каждый из которых состоит из 50 символов.
Массив из семи указателей:
char *r[7];Массив r состоит из указателей на символы.
Указатель на функцию:
int (*f)();f - указатель на функцию, возвращающую целое значение.