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

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

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

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

12.04.2013, 20:00. Просмотров 604. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 20:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование препроцессора (C++):

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

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

Директива препроцессора #if - C++
Вобще при коспиляции файла взятого с офф сайта микрософт endian.h Получаю вот такие ошибки 17|error: operator '==' has no left operand ...

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

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

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

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

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

Не по теме:

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

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

Не по теме:

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

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

Не по теме:

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

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

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

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

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

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


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

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

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