Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
6 / 6 / 2
Регистрация: 12.02.2012
Сообщений: 224
1

Непонятный define#

03.08.2012, 10:48. Просмотров 1166. Ответов 6
Метки нет (Все метки)


Скачал проект откріл в ВС2006.
В файле MyMsg.h есть такой define#. Подскажиет,что он означает??
C++
1
2
#if !defined(AFX_MYMSG_H__C4A763C8_1C42_11D3_8B0E_AF121128CB5E__INCLUDED_)
#define AFX_MYMSG_H__C4A763C8_1C42_11D3_8B0E_AF121128CB5E__INCLUDED_
2) ещё вот :
C++
1
2
3
#if _MSC_VER >= 1000     ???????Вас из дас???????
#pragma once
#endif // _MSC_VER >= 1000
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2012, 10:48
Ответы с готовыми решениями:

struct в define
Всем добрый вечер. Тренируюсь в написании базонезависимого кода под Windows в VS 2013. ...

STRINGTABLE and #define,#ifdef
Всем Здравия! В Visual Studio строки стоит хранить в ресурсах, а точнее в String Table. У меня...

Директива #define: из ANSI в UNICODE
В свойства проекта добавил такое определение препроцессора: MY_SYMBOL="My symbol". Мне нужна эта...

#define в ресурсах приложения MFC
Добрый день. Есть необходимость в зависимости от #define MY_DENIFE менять иконку у приложения. Не...

6
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
03.08.2012, 11:20 2
1)
C++
1
2
#if !defined(...)
#define ...
- уродская конструкция.
C++
1
2
#ifndef ...
#define ...
Вся это штука смотрит, определен ли уже в где-то программе аргумент .... Если какая-либо хрень в скобочках уже была прилинкована (мастера, поправьте, коли ошибаюсь на счет именно линковки), то она пропускается. А если встретилась в первый раз - объявляется программе, что типа вот она есть. А если еще и в строке с #define после имени ... аргумента (константы, если хотите) прописать какое-либо значение, то оно автоматически заменит его во всей программе.
Типа:
C++
1
2
#define ddd 100
int i = ddd;
А компилятор воспримет запись уже как
C++
1
int i = 100;
2) Скрипт.
Если _MSC_VER больше или равна 1000, то прилинковать к проекту нижеследующий код только один раз. В противном случае дописывать копию этого куска кода каждый раз, когда где-то в программе произойдет его подключение.

Добавлено через 4 минуты
Во. Препроцессорные директивы.
0
6 / 6 / 2
Регистрация: 12.02.2012
Сообщений: 224
03.08.2012, 11:20  [ТС] 3
ДА.Спасибо за обьяснение #define)))
Но нахера полсе #define писать такой огроомній и непонятній набор символов(AFX_MYMSG_H__C4A763C8_1C42_11D3_8B0E_AF121128CB5E__ INCLUDED_)??Если можно біло бі просто, к примеру (AFX_MYMSG_H)
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,020
03.08.2012, 11:24 4
RASHFor, Да нужно было им написать так
C++ (Qt)
1
#define Это_просто_моя переменная_как_хочу_так_и_называю
намек понятен?
1
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.08.2012, 11:24 5
А этот "огромный и непонятный набор символов" генерируется совершенно автоматически Мастером (визардом) Студии и не требует даже ни одного движения руками. :-)
1
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.08.2012, 11:27 6
Цитата Сообщение от RASHFor Посмотреть сообщение
Скачал проект откріл в ВС2006.
В файле MyMsg.h есть такой define#. Подскажиет,что он означает??
C++
1
2
#if !defined(AFX_MYMSG_H__C4A763C8_1C42_11D3_8B0E_AF121128CB5E__INCLUDED_)
#define AFX_MYMSG_H__C4A763C8_1C42_11D3_8B0E_AF121128CB5E__INCLUDED_
2) ещё вот :
C++
1
2
3
#if _MSC_VER >= 1000     ???????Вас из дас???????
#pragma once
#endif // _MSC_VER >= 1000
это - два способа исключить такую ситуацию:
имеется файл header.h, в котором среди прочего определена глобальная переменная (например):
C++
1
2
3
...
int abcd;
...
и два файла file0.cpp & file1.cpp,

в каждом из которых есть такое:

C++
1
#include "header.h"
файл вообще-то нужно только один раз сделать "видным" компилятору, но каждый из *cpp должен включить его, чтобы "увидеть" что-то свое.
в приведенном тобой примере - два способа справиться с ситуацией. второй способ не понимают старые версии компилятора, поэтому #pragma once будет видна только компиляторам начиная с версии 1000
первый способ - более понятный: если компилятор уже встретил один
C++
1
#include "header.h"
, значит эта уникальная страшная строчка уже определена, и он не "увидит" содержимое файла второй раз. иначе в нашем примере компилятор зафиксирует попытку второй раз объявить уже объявленную переменную.
1
6 / 6 / 2
Регистрация: 12.02.2012
Сообщений: 224
03.08.2012, 11:51  [ТС] 7
Вот спасибо ""
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.08.2012, 11:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как #define MB_OK присвоить клик ЛКМ или движение курсора?
Как #define MB_OK присвоить клик ЛКМ или движение курсора????

НЕпонятный код
Всем привет опять.Ребят вот мой вопрос.Как можно си код преобразовать таким образом,чтобы там...

Непонятный ключ системного реестра
Вот начал изучать параллельно и MFC. Хотелось бы узнать ответ на такой вопрос: В системном...

Экранировать символ решётки в define
Мне нужно склеить слово "bit" и число от 0 до 7. На данный момент это делается в лоб: #define...


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

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

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