Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Использование предпроцессорных средств для определения условий / 6 сообщений из 6, страница 1 из 1
08.03.2015, 12:24
    #38898284
Использование предпроцессорных средств для определения условий
Здравствуйте.
Задали задачу по вычислению средствами С++ значения системы уровненний, с использованием предпроцессорных средств.
Пытался сделать так:
Код: plaintext
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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
#include "stdafx.h"
#include <iostream>
#include "init.h"
using namespace std;
#define suma(a, b) (a+b)
#define w1 (x,a,b) (a+x+b)
#define w2 (x,a,c) ((x+a+c))
//если с не равно 0, то делим, иначе возвращаем 0
#define w3 (x,с) (с!=0?(x/c):(0))



int _tmain(int argc, _TCHAR* argv[])
{
	//int c =  suma(1, 2);

	cout<<"x=" << X<<endl; 
		cout << "a=" <<A<< endl;
			cout << "b="<<B << endl;
				cout << "c="<<C<< endl;
				int x = X;
				int a = A;
				int b = B;
				int c = C;
				
				a = 1;
				c = 1;
				
				//w1
		//		x=-1;
		//		b=1;
				
				
				//w2
		//		x=1;
		//		b=0;
				
				
				//w3
				x = 0;
				b = 1;
				
				if ((x < 0) && (b != 0))
				{
					cout << "w1" << endl;
				//	w1(x, a, b);
				}
					else
					{
						if ((x>0) || (b == 0))
							cout << "w2" << endl;
						//w2(x, a, c);
						else
							cout << "w3"<<endl;
								//w3(X, C);
						}

#if x<0 && b!=0
				cout << "w1" << endl;

#elif x<0 || b==0
				cout<<"w2"<<endl;
#else 
				cout << "w3" << endl;
#endif

		system("pause");
	return 0;
}


В init.h содержится:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#pragma once
#include <stdio.h>

void init()
{
	std::cout << "helloworld";
}
int X = 1;
int A = 2;
int B = 3;
int C = 4;


В итоге сверяя работу условного оператора if и директивного #if идет расхождение, первый нормально отрабатывает, а второй постоянно выбирает w2, вразумите, что не так делаю?
...
Рейтинг: 0 / 0
08.03.2015, 12:54
    #38898304
Использование предпроцессорных средств для определения условий
Проверил в онлайн компиляторе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <iostream>

using namespace std;

int main()
{int x2=2;
   
#if x2==1 			
cout << "w1" << endl;

#elif x2==2            
cout << "w2" << endl;
#else 			
cout << "w3" << endl;
#endif
   return 0;
}


Результат w3 почему так?
...
Рейтинг: 0 / 0
08.03.2015, 14:05
    #38898380
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование предпроцессорных средств для определения условий
Замени это
Код: plaintext
1.
int x2=2;


на это
Код: plaintext
1.
#define x2 2



Предпроцессор не умеет работать с переменными программы.
...
Рейтинг: 0 / 0
08.03.2015, 14:26
    #38898386
Использование предпроцессорных средств для определения условий
2Dima T Спасибо за комментарий, сам до него дошел за пару минут до этого опытным путем =(
П.С. Если кто-то столкнется с такой же задачей, используйте обычное ветвление, а операции в ветви опишите в макросах и обращайтесь к ним...
...
Рейтинг: 0 / 0
10.03.2015, 02:01
    #38899288
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование предпроцессорных средств для определения условий
Студентикк,

так у вас w_i макрофункции ? Тогда почему пробел между именем функции и скобкой начинающей перечисление аргументов ?
...
Рейтинг: 0 / 0
10.03.2015, 02:02
    #38899289
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование предпроцессорных средств для определения условий
Студентикк,
не вижу решение системы уравнений. Где оно ?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Использование предпроцессорных средств для определения условий / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]