Другие языки программирования и технологии
C++ помогите пож.
Как правильно объявлять директиву #define? Объявляю до/после всех #include - компилятор ругается, может define находится в специальной библиотеке?
#ifndef blahblah
#define blahblah 1
#endif
#define blahblah 1
#endif
Сергей Зацепин
спасибо, оказывается, я после #define ставил точку с запятой, вот и всё
Azyz Sungatov
Так объявляют заголовки на одинарное подключение типа если не было объявлено, то подключить!
Как думаешь, тут есть телепаты? Если нет, то как думаешь - мы без твоего кода и текста сообщения компилятора сможем догадаться, что именно ты не так делаешь?
И нет, директивы препроцессора - не библиотечные объявления, а структуры языка, причем исполняющиеся раньше всех других.
И нет, директивы препроцессора - не библиотечные объявления, а структуры языка, причем исполняющиеся раньше всех других.
#define это определение макроса
есть предопределенные макросы типа __DATE__ __FILE__ __LINE__ __TIME__
файлы проектов в могут определять ещё макросы, например в Visual Studio - параметры проекта - C/C++ -препроцессор - Preprocessor Definition
если режим Debug то там написано _DEBUG, если Release то NDEBUG
для чего это нужно
например, в режиме отладки можно выводить информацию
#ifdef _DEBUG
cout << "ERROR in " << __FILE__ << " line " << __LINE__ << endl;
#endif
когда будет строится release версия то этот код проигнорируется
#if defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD_kernel__) || defined(__GNU__)
//тут инклуды линуксоидов
#elif defined(__APPLE__)
//тут инклуды эйпел
#elif defined(WIN32) || defined(_MSC_VER)
//тут инклуды видовза
#else
дальше общий код
Например, чтото тестируешь. И, можно участок кода включать и выключать, либо отключить и оставить на потом или как демонстрацию для других
//#define MY_TEST //задокументировали, значит теста не будет
#ifdef MY_TEST
//код
#endif
часто define используют для создания констант.
#define PI 3.14159265358979323846f
cout << "sin 45 = " << sin(45)/180.f*PI << endl;
просто в место PI подставляется значение
так же можно сделать так
#ifdef WIN32
#define s32 _int32
#else
#define s32 signed int
#endif
тип _int32 доступен только для Windows, по этому есть else
хотя для таких случаев лучше использовать
typedef signed int s32;
или
using s32 = signed int;
можно делать макросы-функции
#define cube(x) (x*x*x)
cout << "5 в кубе = " << cube(5) << endl;
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
получается это ВСТРАИВАЕМЫЕ функции.
если пишешь большой макрос то можно переходить на следующие строчки символом \
bool init_some_system( void ) { return init_core() ? true : false; }
#define INIT(x, str) { bool res = (x); \
if(!res){ std::string s = str;\
s+= "\nLine: ";\
s += __LINE__;\
MessageBoxA(0, s.c_str(), "Error", MB_OK);}}
INIT(init_some_system, "Ошибка инициализации");
есть предопределенные макросы типа __DATE__ __FILE__ __LINE__ __TIME__
файлы проектов в могут определять ещё макросы, например в Visual Studio - параметры проекта - C/C++ -препроцессор - Preprocessor Definition
если режим Debug то там написано _DEBUG, если Release то NDEBUG
для чего это нужно
например, в режиме отладки можно выводить информацию
#ifdef _DEBUG
cout << "ERROR in " << __FILE__ << " line " << __LINE__ << endl;
#endif
когда будет строится release версия то этот код проигнорируется
#if defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD_kernel__) || defined(__GNU__)
//тут инклуды линуксоидов
#elif defined(__APPLE__)
//тут инклуды эйпел
#elif defined(WIN32) || defined(_MSC_VER)
//тут инклуды видовза
#else
дальше общий код
Например, чтото тестируешь. И, можно участок кода включать и выключать, либо отключить и оставить на потом или как демонстрацию для других
//#define MY_TEST //задокументировали, значит теста не будет
#ifdef MY_TEST
//код
#endif
часто define используют для создания констант.
#define PI 3.14159265358979323846f
cout << "sin 45 = " << sin(45)/180.f*PI << endl;
просто в место PI подставляется значение
так же можно сделать так
#ifdef WIN32
#define s32 _int32
#else
#define s32 signed int
#endif
тип _int32 доступен только для Windows, по этому есть else
хотя для таких случаев лучше использовать
typedef signed int s32;
или
using s32 = signed int;
можно делать макросы-функции
#define cube(x) (x*x*x)
cout << "5 в кубе = " << cube(5) << endl;
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
получается это ВСТРАИВАЕМЫЕ функции.
если пишешь большой макрос то можно переходить на следующие строчки символом \
bool init_some_system( void ) { return init_core() ? true : false; }
#define INIT(x, str) { bool res = (x); \
if(!res){ std::string s = str;\
s+= "\nLine: ";\
s += __LINE__;\
MessageBoxA(0, s.c_str(), "Error", MB_OK);}}
INIT(init_some_system, "Ошибка инициализации");
Объявляй там, где он тебе нужен.
Пример:
#define EType_1 int
void foo(){
EType_1 N = 100;
#define EType_2 float
EType_2 a = 0.5;
#undef EType_2
}
Пример:
#define EType_1 int
void foo(){
EType_1 N = 100;
#define EType_2 float
EType_2 a = 0.5;
#undef EType_2
}
Похожие вопросы
- Помогите пож-та,ОЧ надо завтра на контрольную написать задачу на языке Visual Studio 2010 (c++) Заранее СПС !!!
- Проблемы по WORDу... помогите пож...
- C++ Объясните пож. на доступном языке про спецификаторы класса памяти. В инете и в книгах слишком заумно. Продолж ниже.
- C++ помогите начинающему ?
- Перевести C++ => C# Помогите пожалуйста!
- Связь Питона и C#. Помогите
- dev c++. помогите плз сделать задачу найти наибольшую высоту треугольника из сторонами a,b,c
- НОК 2-ух чисел - C++ Помогите, люди добрые. Как написать прогу на C++, которая вычисляет НОК двух чисел
- Что такое return в c# помогите
- C++ помогите пожалуйста! Без вашей помощи никак не получается