LINUX.ORG.RU

enum


0

1

хочу странного, хочу в своем namespace объявить некие константы, например LOG_INFO, проблема в том что LOG_INFO уже объявлен дефайном в <syslog.h> но ведь дефайн он глобальный, а у меня namespace... что-то туплю...

#include <syslog.h>

namespace z
{
//const int LOG_INFO = 0;
//typedef enum { LOG_INFO } y;

}

int main()
{
    return 0;
}
★★★★

Макросы настолько глобальны, что им плевать на области имён. Первый проход делает препроцессор, который заменяет все макроопределения и избавляет от них код. Вам стоит подучить сам язык.

anonymous
()
Ответ на: комментарий от anonymous

да дейсивтельно это происходит на стадии прохода препроцессора. после бессонной ночи я и в i++ сделаю ошибку

quest ★★★★
() автор топика
Ответ на: комментарий от quest

Не включать syslog.h напрямую. C и C++ разные языки, о чём многие забывают. А это заголовочный файл для C. В С++ макроопределения достаточно бесполезны.

Ещё можно #undef, но это очень-очень плохой вариант.

anonymous
()
Ответ на: комментарий от quest

// syslog.hpp
#ifndef SYSLOG_HPP
#define SYSLOG_HPP

#include <syslog.h>
#undef MACRO1
#undef MACRO2

#endif

Или пишите обёртку в виде класса для нужной вам части библиотеки.

anonymous
()

Просто надо использовать КАПС только для макросов.

const86 ★★★★★
()
Ответ на: комментарий от quest

> как бы извратиться то? ...

можно так попробовать:

#ifdef LOG_INFO
enum {
	LOG_INFO_ = LOG_INFO,
#undef LOG_INFO
	LOG_INFO = LOG_INFO_
};
#endif

namespace z
{
	enum {
		LOG_INFO = 12345
	};
}

printf("LOG_INFO=%d\n", LOG_INFO);
printf("z::LOG_INFO=%d\n", z::LOG_INFO);

зы: код не тестил :)

arsi ★★★★★
()

Значит плохое имя переменной выбрад. Тут в чем дело, проблему решить можно, но уже точно без костыля не будет. Зачем осознанно вводить костыль когда можно без него?

vertexua ★★★★★
()
Ответ на: комментарий от arsi

да батенька вы знаете толк в извращениях))) это такой хитрый способ define заменить на enum. работает)

quest ★★★★
() автор топика
Ответ на: комментарий от anonymous

быдлокод обычно рождается из за недостатка знаний, времени, непродуманной архитектуры и в условиях постоянной смены программистов)))

quest ★★★★
() автор топика
Ответ на: комментарий от arsi

Остроумное решение. Правда, сильно смахивает на wtf.

geekless ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.