Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Raymoon
3 / 3 / 1
Регистрация: 16.02.2013
Сообщений: 59
15.10.2013, 18:39     макрос препроцессора #1
Здравствуйте ув. форумчани. Читаю книгу "Философия с++. Введение в стандартный с++". Дошел к одному примеру. И все компилируется, но результат выполнения математических операций не выводится. Как я понимаю вся проблема в макросе 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);
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 18:39     макрос препроцессора
Посмотрите здесь:

директива препроцессора C++
C++ Директивы препроцессора
C++ увидеть результат препроцессора
Обработка препроцессора C++
C++ Вопрос по директивам препроцессора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,831
Записей в блоге: 2
Завершенные тесты: 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;
B@R_LOG
 Аватар для 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;
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 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;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,831
Записей в блоге: 2
Завершенные тесты: 1
15.10.2013, 21:32     макрос препроцессора #5
Jupiter, x в конце лучше бы в скобки взять:
C++
1
#define VAR_DUMP(x) std::cout << #x" = " << (x)
Jupiter
15.10.2013, 21:48     макрос препроцессора
  #6

Не по теме:

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

Yandex
Объявления
15.10.2013, 21:48     макрос препроцессора
Ответ Создать тему
Опции темы

Текущее время: 10:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru