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

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

Войти
Регистрация
Восстановить пароль
 
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
#1

Использование препроцессора - C++

12.04.2013, 20:00. Просмотров 579. Ответов 15
Метки нет (Все метки)

Здравия желаю!

Есть ли смысл в конструкции #ifdef - #endif в данном коде, и если есть, то какой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class myClass
{
public:
    myClass(const char* const a);
    ~myClass();
#ifdef _OSTREAM_
    friend std::ostream& operator<<(std::ostream& output, numeric& ob);
#endif
private:
    char nump;
};
 
numeric::numeric(const char* const a){}
numeric::~numeric(){}
#ifdef _OSTREAM_
    std::ostream& operator<<(std::ostream& output, numeric& ob){}
#endif
Я хотел сделать так: если есть файл ostream.h или iostream.h( как я понял iostream требует ostream и подключает его сам ), то подключить и функцию из класса. А если нет, то и не нужно оно нам.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 20:00     Использование препроцессора
Посмотрите здесь:

Использование директив препроцессора - C++
Составить программу, использующую директивы препроцессора: с помощью директивы #define вычислить x3 , при x = −2,−1,...,2 с помощью...

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

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

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

макрос препроцессора - C++
Здравствуйте ув. форумчани. Читаю книгу &quot;Философия с++. Введение в стандартный с++&quot;. Дошел к одному примеру. И все компилируется, но...

увидеть результат препроцессора - C++
как я понял, после работы препроцессора создается файл с расширением .i , который скармливается самому компилятору, но т.к. я на своем...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
12.04.2013, 20:13     Использование препроцессора #2
Если не нужна переносимость на разные компиляторы и платформы, можно просто посмотреть include guard в файле ostream, там в начале будет нечто вроде
C++
1
2
#ifndef OSTREAM_INCLUDED
#define OSTREAM_INCLUDED
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
12.04.2013, 20:21  [ТС]     Использование препроцессора #3
Nick Alte,

Я и посмотрел там как раз, и был такой код:
C++
1
2
3
4
5
6
#ifndef _OSTREAM_
#define _OSTREAM_
 
......
 
#endif
Потому-то я и себе вписал эти проверки.
yekka
385 / 149 / 8
Регистрация: 12.05.2011
Сообщений: 450
12.04.2013, 20:48     Использование препроцессора #4
получается, если юзер пишет
C++
1
2
#include <iostream>
#include "your_header.hpp"
то operator<< у него есть. А если пишет
C++
1
2
#include "your_header.hpp"
#include <iostream>
то оператор исчезает.
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
13.04.2013, 21:32  [ТС]     Использование препроцессора #5
yekka,
А это исправить можно?
Придется вписать
C++
1
#include<ostream>
в подключаемые моего заголовочного и никак иначе?
yekka
385 / 149 / 8
Регистрация: 12.05.2011
Сообщений: 450
13.04.2013, 21:37     Использование препроцессора #6
очень хочется сказать "ты не должен этого хотеть",
но, честно говоря, я совсем не понимаю чего ты хочешь.
что ты хочешь сделать?
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
13.04.2013, 21:45  [ТС]     Использование препроцессора #7
Смысл такой: хочу сделать перегрузку оператора << для вывода нужных значений из класса.
Используется поток ostream, который определен в <ostream> и иже с ним.
Но если нет этого <ostream> в программе вообще, то и перегружать нечего.
yekka
385 / 149 / 8
Регистрация: 12.05.2011
Сообщений: 450
13.04.2013, 21:48     Использование препроцессора #8
ты не можешь решить для себя, нужен тебе в программе operator<< или не нужен?
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
13.04.2013, 22:01  [ТС]     Использование препроцессора #9
Мне нужен, опять же в данной ситуации, но вдруг использовать кто-то другой будет, не имея понятия, что нужен ostream...
cygwin
1 / 1 / 0
Регистрация: 10.04.2013
Сообщений: 17
13.04.2013, 22:47     Использование препроцессора #10
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
Мне нужен, опять же в данной ситуации, но вдруг использовать кто-то другой будет, не имея понятия, что нужен ostream...
Ты же в курсе, что препроцессор обрабатывает код непосредственно до компиляции, верно?
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
13.04.2013, 23:04  [ТС]     Использование препроцессора #11
Цитата Сообщение от cygwin Посмотреть сообщение
Ты же в курсе, что препроцессор обрабатывает код непосредственно до компиляции, верно?
В курсе
OhMyGodSoLong
13.04.2013, 23:26
  #12

Не по теме:

Ну тогда извещаю ещё об одном, чтобы тоже были в курсе. Идентификаторы, начинающиеся на подчёркивание и заглавную букву, зарезервированы для внутренних целей реализации, поэтому их использование не рекомендуется во избежание трудноуловимой деструктивной интерференции определений.

TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
13.04.2013, 23:39  [ТС]     Использование препроцессора #13
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение

Не по теме:

Ну тогда извещаю ещё об одном, чтобы тоже были в курсе. Идентификаторы, начинающиеся на подчёркивание и заглавную букву, зарезервированы для внутренних целей реализации, поэтому их использование не рекомендуется во избежание трудноуловимой деструктивной интерференции определений.

3 предпоследних слова не очень уловил, но за извещение спасибо.
OhMyGodSoLong
13.04.2013, 23:53
  #14

Не по теме:

Примерно такое же ощущение у вас будет, когда вы с этим столкнётесь. Ничё не понятно, что сломалось, но оно сломалось. А всё потому, что вы переопределили какой-то макрос _IMPORTANT_, который по счастливой случайности реализация тоже определяет где-то у себя внутри. А потом одна из стандартных функций тоже оказалась реализована как макрос, и вместо положенного идентификатора туда подставился ваш.

TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 90
14.04.2013, 00:09  [ТС]     Использование препроцессора #15
То есть свои макросы вообще лучше не использовать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 00:46     Использование препроцессора
Еще ссылки по теме:

Массивы и директив препроцессора - C++
Помогите доделать прогу. Эта прога выделяет два произвольных столбца в двумерном массиве. Требуется дописать сложение элементов массива...

Объясните вывод препроцессора - C++
Обьясните, толковые люди, но подробно, почему вывод будет HelloWorldXY ? #include &lt;iostream&gt; #define X Hello #define Y World ...

Директива препроцессора 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;...

Русификация Си++ с помощю препроцессора и #define - C++
Возможна русификация всех Си++ которые позволяют использовать кириллицу в #define. // Заголовочный файл для русификации служебных слов...


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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.04.2013, 00:46     Использование препроцессора #16
Лучше не начинать свои идентификаторы с подчёркивания. Я к этому веду.
Yandex
Объявления
14.04.2013, 00:46     Использование препроцессора
Ответ Создать тему
Опции темы

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