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

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

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

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

15.10.2013, 18:39. Просмотров 324. Ответов 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);
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 18:39     макрос препроцессора
Посмотрите здесь:

директива препроцессора C++
C++ Директивы препроцессора
Обработка препроцессора C++
C++ Массивы и директив препроцессора
C++ Директива препроцессора #if
C++ Использование препроцессора
Подключение директив препроцессора C++
C++ Директивы препроцессора
C++ Директива препроцессора pragma
C++ Объясните вывод препроцессора
C++ Использование директив препроцессора
Директивы препроцессора Составить программу, использующую директивы препроцессора C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12542 / 7104 / 797
Регистрация: 27.09.2012
Сообщений: 17,521
Записей в блоге: 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++
6548 / 3968 / 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
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12542 / 7104 / 797
Регистрация: 27.09.2012
Сообщений: 17,521
Записей в блоге: 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     макрос препроцессора
Ответ Создать тему
Опции темы

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