1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
1

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

12.04.2013, 20:00. Показов 994. Ответов 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 и подключает его сам ), то подключить и функцию из класса. А если нет, то и не нужно оно нам.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2013, 20:00
Ответы с готовыми решениями:

Использование директив препроцессора
Составить программу, использующую директивы препроцессора: с помощью директивы #define вычислить...

Использование препроцессора для генерации строк
Здрям! Грубо говоря, есть макрос, например: #define COUNT 8 И есть строка, которая должна...

Директивы препроцессора Составить программу, использующую директивы препроцессора
1) Задать константы M1,M2,...,M5 и вычислить M1+ 2M2 + 3M3 + 4M4 + 5M5 2) С помощью директив #if,...

Директива препроцессора #if
Вобще при коспиляции файла взятого с офф сайта микрософт endian.h Получаю вот такие ошибки...

15
Эксперт С++
1671 / 1043 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
12.04.2013, 20:13 2
Если не нужна переносимость на разные компиляторы и платформы, можно просто посмотреть include guard в файле ostream, там в начале будет нечто вроде
C++
1
2
#ifndef OSTREAM_INCLUDED
#define OSTREAM_INCLUDED
0
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
12.04.2013, 20:21  [ТС] 3
Nick Alte,

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

Не по теме:

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

0
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
13.04.2013, 23:39  [ТС] 13
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение

Не по теме:

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

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

Не по теме:

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

0
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
14.04.2013, 00:09  [ТС] 15
То есть свои макросы вообще лучше не использовать?
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
14.04.2013, 00:46 16
Лучше не начинать свои идентификаторы с подчёркивания. Я к этому веду.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2013, 00:46
Помогаю со студенческими работами здесь

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

директива препроцессора
Не получается запустить простенькую программу на С++ Borland,вроде сделал все как надо,но выдает...

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru