Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Define идентификатор замена




Поля идентификатор и замена разделяются одним или несколькими пробелами. Директива #define указывает компилятору, что нужно подставить строку, определенную аргументом замена, вместо каждого аргумента идентификатор в исходном файле. Идентификатор не заменяется, если он находится в комментарии, в строке или как часть более длинного идентификатора.

#include <stdio.h>
#define A 3
int main()

{

printf("%d + %d = %d", A, A, A+A); // 3 + 3 = 6

getchar();

return 0;
}

В зависимости от значения константы компилятор присваивает ей тот или иной тип. С помощью суффиксов можно переопределить тип константы:

· U или u представляет целую константу в беззнаковой форме (unsigned);

· F (или f) позволяет описать вещественную константу типа float;

· L/span> (или l) позволяет выделить целой константе 8 байт (long int);

· L/span> (или l) позволяет описать вещественную константу типа long double

#define A 280U // unsigned int
#define B 280LU // unsigned long int
#define C 280 // int (long int)
#define D 280L // long int
#define K 28.0 // double
#define L 28.0F // float
#define M 28.0L // long double

Вторая форма синтаксиса определяет макрос, подобный функции, с параметрами. Эта форма допускает использование необязательного списка параметров, которые должны находиться в скобках. После определения макроса каждое последующее вхождение

Идентификатор (аргумент 1,..., агрумент n)

замещается версией аргумента замена, в которой вместо формальных аргументов подставлены фактические аргументы.

Пример Вычисление синуса угла

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265
#define SIN(x) sin(PI*x/180)
int main()

{

int c;

system("chcp 1251");

system("cls");

printf("Введите угол в градусах: ");

scanf("%d", &c);

printf("sin(%d)=%lf", c, SIN(c));

getchar(); getchar();

return 0;
}

Результат выполнения

Отличием таких макроопределений от функций в языке Си является то, что на этапе компиляции каждое вхождение идентификатора замещается соответствующим кодом. Таким образом, программа может иметь несколько копий одного и того же кода, соответствующего идентификатору. В случае работы с функциями программа будет содержать 1 экземпляр кода, реализующий указанную функцию, и каждый раз при обращении к функции ей будет передано управление.
Отменить макроопределение можно с помощью директивы #undef.

Однако при использовании таких макроопределений следует соблюдать осторожность, например

#include <stdio.h>
#define sum(A,B) A+B
int main(){

int a,b,c,d;

a=3; b=5;

c = (a + b)*2; // c = (a + b)*2

d = sum(a, b) * 2; // d = a + b*2;

printf(" a = %d\n b = %d\n", a, b);

printf(" c = %d \n d = %d \n", c, d);

getchar();

return 0;
}

Результат выполнения:

Условная компиляция

Директивы #if или #ifdef/#ifndef вместе с директивами #elif, #else и #endif управляют компиляцией частей исходного файла.Если указанное выражение после #if имеет ненулевое значение, в записи преобразования сохраняется группа строк, следующая сразу за директивой #if. Синтаксис условной директивы следующий:





Поделиться с друзьями:


Дата добавления: 2016-11-02; Мы поможем в написании ваших работ!; просмотров: 513 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Ваше время ограничено, не тратьте его, живя чужой жизнью © Стив Джобс
==> читать все изречения...

2264 - | 2207 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.