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

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

Войти
Регистрация
Восстановить пароль
 
 
fryn3
3 / 3 / 0
Регистрация: 03.07.2013
Сообщений: 56
#1

Как сделать #define глобальным? - C++

01.06.2016, 11:48. Просмотров 315. Ответов 17
Метки нет (Все метки)

у меня есть "definefile.h" в котором объявлено много дефайнов. Я хочу что бы этот файл можно было подключать через #include и пользоваться дефайнами. Можно ли так сделать? Если нет, как можно что нибудь подобное реализовать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2016, 11:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать #define глобальным? (C++):

Как сделать из #define строку? - C++
Как сделать из #define-переменной строку? Я компилирую с флагом -DVERSION=`git tag | head -n 1`, но когда я использую её в коде: ...

как работает #define в примере ? - C++
Почему пезультат 2? #include <iostream> using namespace std; #define A 0 #define B A+1

#define работает не так, как ожидается - C++
Здравствуйте. Подскажите, пожалуйста, почему в таком случае некорректно использовать #define: switch (kind) { case 1: ...

Есть ли замена функциям как, например, define? - C++
Недавно из прочитанной статьи о директивах препроцессора define узнал, что ее (define) можно применять и в качестве функции: #define...

Как влияет inline и обертка(#ifndef #define #endif) .h файла на компоновщик. - C++
Есть файл Point.h: #ifndef POINT_GUARD #define POINT_GUARD ...

Почему нельзя использовать в операторе case переменные, которые определены как #define - C++
Я не понимаю, почему Visual Studio ругается на строку с case в коде. Вроде все правильно. Если там написать напрямую цифру, тогда все...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tenebris
2 / 2 / 0
Регистрация: 30.06.2015
Сообщений: 40
01.06.2016, 12:44 #2
#include "definefile.h" (если рядом с проектом) если нет прописываешь полный путь #include "C:/.../definefile.h" или вопрос не в этом?
0
fryn3
3 / 3 / 0
Регистрация: 03.07.2013
Сообщений: 56
01.06.2016, 12:57  [ТС] #3
#include "definefile.h" - на это не ругается. Просто в файле где я добавляю этот файл не видны дефайны definefile.h. Я думал что они должны были быть, но они не видны.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
01.06.2016, 13:13 #4
Цитата Сообщение от fryn3 Посмотреть сообщение
не видны дефайны
Они и не могут быть видны. Их видит только препроцессор.
0
fryn3
3 / 3 / 0
Регистрация: 03.07.2013
Сообщений: 56
01.06.2016, 13:29  [ТС] #5
хочу сказать что я в коде использую дефайны, а IDE ругается, что они не объявлены
0
Renji
1917 / 1315 / 298
Регистрация: 05.06.2014
Сообщений: 3,758
01.06.2016, 13:35 #6
Цитата Сообщение от fryn3 Посмотреть сообщение
#include "definefile.h" - на это не ругается. Просто в файле где я добавляю этот файл не видны дефайны definefile.h.
Скиньте минимальный пример уровня "вот здесь у меня #define test "test", вот здесь cout<<test, но компилятор на cout<<test ругается". Все что не связано с проблемой - нещадно из примера вырезайте.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
01.06.2016, 13:39 #7
fryn3, а вы их, надеюсь, в definefile.h прописали, а не в definefile.cpp?
0
Tenebris
2 / 2 / 0
Регистрация: 30.06.2015
Сообщений: 40
01.06.2016, 14:26 #8
C++
1
2
3
4
5
6
7
8
#include <iostream>
#define Summ(x,y) ((x)+(y))
using namespace std;
 
int main()
{
    cout<<Summ(10,20);
}
норм?
0
fryn3
3 / 3 / 0
Регистрация: 03.07.2013
Сообщений: 56
01.06.2016, 15:22  [ТС] #9
Ребята, я создал проект в вижуале и сделал аналогию, и у меня все работает.
Кликните здесь для просмотра всего текста

main.cpp
C++
1
2
3
4
5
6
7
#include "OtherFile.h"
 
int main()
{
    test();
    return 0;
}
HeaderFile.h
C++
1
2
3
#pragma once
#define one 1
#define two 2
OtherFile.h
C++
1
2
3
4
5
#pragma once
#include <iostream>
#include "HeaderFile.h"
 
void test();
OtherFile.cpp
C++
1
2
3
4
5
6
#include "OtherFile.h"
 
void test()
{
    std::cout << one << std::endl << two << std::endl;
}



Но я пишу в IDE Kail на С99 Mode. может поэтому не работает?
0
Renji
1917 / 1315 / 298
Регистрация: 05.06.2014
Сообщений: 3,758
01.06.2016, 16:48 #10
Может, оно на прагме падает? Попробуйте вместо прагмы:
C++
1
2
3
4
5
#ifndef HEADERFILE_H
#define HEADERFILE_H
#define one 1
#define two 2
#endif // HEADERFILE_H
0
fryn3
3 / 3 / 0
Регистрация: 03.07.2013
Сообщений: 56
01.06.2016, 16:53  [ТС] #11
В Kail пробовал и так:
C++
1
2
3
4
#ifndef HEADERFILE_H
#define HEADERFILE_H
...
#endif // HEADERFILE_H
И без этого. Все равно не видит дефайны(
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.06.2016, 17:52 #12
В "С99 Mode" нет std::cout.
Как ругается компилятор?
0
fryn3
3 / 3 / 0
Регистрация: 03.07.2013
Сообщений: 56
01.06.2016, 18:07  [ТС] #13
Цитата Сообщение от castaway Посмотреть сообщение
В "С99 Mode" нет std::cout.
Как ругается компилятор?
Вы не поняли... То что скинул, это пример как я работаю с дэфайном. А сам рабочий проект очень это программа для микроконтроллера
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.06.2016, 18:17 #14
Цитата Сообщение от fryn3 Посмотреть сообщение
Вы не поняли...
Вы тоже.
Цитата Сообщение от castaway Посмотреть сообщение
Как ругается компилятор?
0
fryn3
3 / 3 / 0
Регистрация: 03.07.2013
Сообщений: 56
01.06.2016, 18:19  [ТС] #15
Дефайн не объявлен
"error: #20: identifier "MainProgVersion" is undefined"

хотя он в define.h есть и файл подключен
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2016, 18:19
Привет! Вот еще темы с ответами:

#define - C++
#define зачем нужна это заголовочный файл какие у него функции и как им ползоватса?

define - C++
И еще такой вопрос для чего служит #define ??

define не - C++
Здравствуйте. &quot;Дефайню&quot; &quot;%f&quot; для вывода: #define fss &quot;%f&quot;; . И потом делаю вывод вот такой вот: for(i=0;i&lt;n;i++) fscanf(in,fss,&amp;a-&gt;di);. И...

#define c :: - C++
Подскажите как реализовать такую замену: #define sa2::sys::getClientKernel()-&gt;getXDBTManager() cls_SimpleXDBTManager::Instance() ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.06.2016, 18:19
Ответ Создать тему
Опции темы

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