Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Условная компиляция, сокращенный вариант 
:(
    Опции темы
Swit
Дата 3.10.2005, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 27.9.2005

Репутация: нет
Всего: нет



Приветствую! Вот выполняю такой код:

#include <iostream.h>
#include <conio.h>
#include <windows.h>
#define Nero

char *Rus (char *text);

void main (void)
{
#ifdef Dosia
cout << Rus ( " Первое выполнение " ) << endl;

#elif Nero
cout << Rus ( " Второе выполнение " ) << endl;

#else
cout << Rus ( " Третье выполнение " ) << endl;

#endif

getch ();
}

char bufRus [300];
char *Rus (char *text)
{
CharToOem (text,bufRus);
return bufRus;
}


// #elif (эквивалент else if в обычной структуре if) но почему - то на нем компиляция и заканчивается, может кто подскажет в чем дело, хотя если ввожу Dosia в директиву #define первое выполнение проходит.
PM MAIL   Вверх
DeadSoul
Дата 3.10.2005, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: нет
Всего: 11



Swit,
Используй теги. Так
Код

#include <iostream.h>
#include <conio.h>
#include <windows.h>
#define Nero

char *Rus (char *text);

void main (void)
{
#ifdef Dosia
cout << Rus ( " Первое выполнение " ) << endl;

#elif Nero
cout << Rus ( " Второе выполнение " ) << endl;

#else
cout << Rus ( " Третье выполнение " ) << endl;

#endif

getch ();
}

char bufRus [300];
char *Rus (char *text)
{
CharToOem (text,bufRus);
return bufRus;
}


более читабельно.

Точно оно туда не доходит это правильно. Смотри:
Код

int i=1;
if ( i==1 )
{
cout<<"A";
}
else if ( i> 0 )
{
cout<<"B";
}
else
{
cout<<"C";
}


Что выведет? Здесь ты согласен с компилятором?




--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Swit
Дата 3.10.2005, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 27.9.2005

Репутация: нет
Всего: нет



DeadSoul, согласен но мне просто хочется разобраться со своим кодом. Про теги я знаю но всеже почему не идет #elif Nero. Может у кого еще есть умные мысли

Благодарю за совет!
PM MAIL   Вверх
DeadSoul
Дата 3.10.2005, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: нет
Всего: 11



Swit, ты второй код смотрел? Что он выведет?

else if( что препроцессорный, что сишный) выпоняется только если не выполнился if. Вот и все


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Swit
Дата 3.10.2005, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 27.9.2005

Репутация: нет
Всего: нет



DeadSoul дык в том то и дело что условие у нас такое что если не выполняется
#define Dosia а вместо Dosia стоит Nero то выполняется второе услови. В этом и есть отличие от обычных структур т.е. можно управлять выводом на протяжении всего кода изменив всего лишь #define Name!!!
PM MAIL   Вверх
DeadSoul
Дата 3.10.2005, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: нет
Всего: 11



Swit
Цитата(Swit @ 3.10.2005, 22:56)
DeadSoul дык в том то и дело что условие у нас такое что если не выполняется
#define Dosia а вместо Dosia стоит Nero то выполняется второе услови. В этом и есть отличие от обычных структур т.е. можно управлять выводом на протяжении всего кода изменив всего лишь #define Name!!!

Я знаю для чего нужна условная компиляция smile . Поверь мне.

Ларчик тоньше:
Код

#if Nero
#ifdef Nero

Разницу видишь?

Вот она:
Код

#define TEST 0
ifdef TEST // TRUE

if TEST // FALSE!!!!



--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Swit
Дата 4.10.2005, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 27.9.2005

Репутация: нет
Всего: нет



DeadSoul дружище я верю что ты разбираешься в условной компиляции, но к примеру когда выполняется код такого вида:

#ifdef Dosia
cout << Rus ( " Первое выполнение " ) << endl;

#else if Nero
cout << Rus ( " Второе выполнение " ) << endl;
#endif

то все проходит без всяких там загадок smile , пишишь Dosia в #define, выполняется " Первое выполнение ", если меняю в #define на Nero, соответственно " Второе выполнение ". У меня единственный вопрос если #else if это тоже самое что и #elif в сокращенном виде , то какого хрена он не проходит??? smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0753 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.