Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Raymoon
3 / 3 / 1
Регистрация: 16.02.2013
Сообщений: 59
#1

макрос препроцессора - C++

15.10.2013, 18:39. Просмотров 350. Ответов 5
Метки нет (Все метки)

Здравствуйте ув. форумчани. Читаю книгу "Философия с++. Введение в стандартный с++". Дошел к одному примеру. И все компилируется, но результат выполнения математических операций не выводится. Как я понимаю вся проблема в макросе PRINT, т.к. если результат через cout вполне нормально выводит. Хочется узнать, что не так собственно говоря. Вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Математические операторы;
#include <iostream>
using namespace std;
 
 
// Вспомогательный макрос для вывода строки и значения;
 #define PRINT(STR, VAR) \
    cout << STR << " = " << endl;
 
int main() {
    int i, j, k;
    float u, v, w; // Также относится к double;
    cout << "enter an integer: ";
    cin >> j;
    cout << "enter another integer: ";
    cin >> k;
    PRINT("j", j); PRINT("k", k);
    i = j + k; PRINT("j + k", i);
    i = j - k; PRINT("j - k", i);
    i = k / j; PRINT("k / j", i);
    i = k * j; PRINT("k * j", i);
    i = k % j; PRINT("k % j", i);
    
// Следующая команда работает только с целыми числами;
    j %= k; PRINT("j %= k", j);
    cout << "Enter a foating-point number: ";
    cin >> v;
    cout << "Enter another floating-point number";
    cin >> w;
    PRINT("v", v); PRINT("w", w);
    u = v + w; PRINT("v + w", u);
    u = v - w; PRINT("v - w", u);
    u = v * w; PRINT("v * w", u);
    u = v / w; PRINT("v / w", u);
// Следующий фрагмент также работает с int, double и char;
    u += v; PRINT("u += v", u);
    u -= v; PRINT("u -= v", u);
    u *= v; PRINT("u *= v", u);
    u /= v; PRINT("u /= v", u);
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 18:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос макрос препроцессора (C++):

Директивы препроцессора Составить программу, использующую директивы препроцессора - C++
1) Задать константы M1,M2,...,M5 и вычислить M1+ 2M2 + 3M3 + 4M4 + 5M5 2) С помощью директив #if, #else, #elif осуществлять выбор строк...

Обработка препроцессора - C++
Дня доброго. Есть небольшая проблема #include&lt;iostream&gt; using namespace std; #define M 10 #ifndef N #define N 20 #endif ...

Директива препроцессора #if - C++
Вобще при коспиляции файла взятого с офф сайта микрософт endian.h Получаю вот такие ошибки 17|error: operator '==' has no left operand ...

Директивы препроцессора - C++
Добрый вечер, форумчане. Возникла проблема: В условии задания имеется - базовый класс и 2-х производных от него. При *подключении...

Директивы препроцессора - C++
Помогите разобраться. Я не могу понять как работают директивы препроцессора. Где находится файл описания, файл реализации, нужно ли...

Использование препроцессора - C++
Здравия желаю!:) Есть ли смысл в конструкции #ifdef - #endif в данном коде, и если есть, то какой: class myClass { public:...

5
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
15.10.2013, 18:41 #2
C++
1
2
 #define PRINT(STR, VAR) \
    cout << STR << " = " << endl;
А где вывод то в этом макросе?

Может так:
C++
1
2
 #define PRINT(STR, VAR) \
    cout << STR << " = " << (VAR) << endl;
1
B@R_LOG
18 / 18 / 0
Регистрация: 03.07.2013
Сообщений: 49
15.10.2013, 18:46 #3
Замени на:
C++
1
2
 #define PRINT(STR, VAR) \
    cout << STR << " = " << VAR << endl;
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.10.2013, 19:00 #4
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
#define VAR_DUMP(x) std::cout << #x" = " << x
 
int main() 
{
    int i = 100500;
    VAR_DUMP(i);
    return 0;
}
1
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
15.10.2013, 21:32 #5
Jupiter, x в конце лучше бы в скобки взять:
C++
1
#define VAR_DUMP(x) std::cout << #x" = " << (x)
0
Jupiter
15.10.2013, 21:48     макрос препроцессора
  #6

Не по теме:

Croessmah, не надо вообще использовать препроцессор передавать выражения туда где ожидается переменная, название макроса на это намекает, а если кто-то передал то это его проблемы

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2013, 21:48
Привет! Вот еще темы с ответами:

директива препроцессора - C++
Не получается запустить простенькую программу на С++ Borland,вроде сделал все как надо,но выдает ошибку что не может подключиться к...

Директива препроцессора pragma - C++
Добрый день! Помогите, пожалуйста, не могу понять смысл такой записи. (интересуют строки с участием _PACKED(строки 2-6 и 51-60), и что...

Подключение директив препроцессора - C++
Не могу найти подходящую информацию=( Даны директивы : A) #include &lt;conio.h&gt; B) #include &lt;grafh.h&gt; C) #include &lt;math.h&gt;...

Вопрос по директивам препроцессора - C++
Использую VS 2008. Работал с микроконтроллерами PIC с компилятором HI-TECH, так вот, там была такая директива ##n. Работала она так:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
15.10.2013, 21:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru