Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
1

Необходимо разобраться с директивами условной компиляции

27.01.2012, 20:51. Показов 3088. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья! Боюсь, что без предисловий не обойтись. Постараюсь, чтобы они были короткими. Поехали:
Часть кода:
C++
1
#include<semaphore.h>
Сообщение ккомпилятора:
Bash
1
include\semaphore.h:152 'mode_t' has not been declared
++++++++++++++++++++++++++++++++++++++++++++++++

Лезу в include\semaphore, вижу:
C++
1
2
3
4
PTW32_DLLPORT int __cdecl sem_open (const char * name,
                int oflag,
                mode_t mode,
                unsigned int value);
Начинаю поиски типа mode_t,выыше, в этом же файле include\semaphore.h наблюдаю такие объявления:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * This is a duplicate of what is in the autoconf config.h,
 * which is only used when building the pthread-win32 libraries.
 */
 
#ifndef PTW32_CONFIG_H
#  if defined(WINCE)
#    define NEED_ERRNO
#    define NEED_SEM
#  endif
#  if defined(__MINGW64__)
#    define HAVE_STRUCT_TIMESPEC
#    define HAVE_MODE_T
#  elif defined(_UWIN) || defined(__MINGW32__)
#    define HAVE_MODE_T
#  endif
#endif
//Тут всякие разные объявления
#ifndef HAVE_MODE_T
typedef unsigned int mode_t;
#endif

Ну волт, собсно говоря и всё. В былые времена я бы приписал не задумываясь:
C++
1
typedef unsigned int mode_t;
Но тут мне захотелось сыграть по правилам. То есть я так понимаю, что mode_t становится известным компилятору только если определена переменная __MINGW32__; а как правильно её определить? Знания, которые я почерпнул здесь
Препроцессорные директивы в C/C++ (#include, #define и прочее)
помогут мне просто написать:
C++
1
typedef unsigned int mode_t;
но повторюсь, хотелось бы сыграть по правилам, то есть разобраться для начала со строчкой:
C++
1
#ifndef PTW32_CONFIG_H
Ну и далее по порядку. Спасибо, кто откликнется.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2012, 20:51
Ответы с готовыми решениями:

Немогу разобраться с директивами
Люди есть проблема. (с++) Значит учусь я в универе. А там IDE у нас короче очень древняя...

Директивы условной компиляции
На сколько часто вы используете директивы условной компиляции? Есть ли преимущества их...

Аналог условной компиляции Q_OS_XXX
Есть код на плюсах: #ifdef Q_OS_LINUX pos_= this-&gt;geometry().topLeft(); #endif Как это...

Применение директив условной компиляции
Здравствуйте ! Подскажите пожалуйста, для чего в этой программе используются директивы ...

23
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
27.01.2012, 23:00 21
Author24 — интернет-сервис помощи студентам
я уже писал, что semaphore.h не обязан определять mode_t (хотя это и не запрещено). а раз так, подключаем заголовок, где определен mode_t
1
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
27.01.2012, 23:00 22
У меня нынче sys/types.h явно включается в semaphore.h... Но тем не менее в любом руководстве в исходниках присутствуют все нужные хидеры.
1
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
27.01.2012, 23:09 23
раз компилятор не видит mode_t, значит тип не определен.
на основании строк
C++
1
2
3
#ifndef HAVE_MODE_T
typedef unsigned int mode_t;
#endif
делаем вывод, что макрос HAVE_MODE_T где-то выше все таки задефайнен. Т.к. нигде в этом файле выше больше нет попыток затайпдефить mode_t и нет других инклудов, значит mode_t должeн быть определен где-то за пределами semaphore.h. в другом файле. и этот другой файл должен включатся перед semaphore.h. т.е. имеем зависимость от порядка включения инклудов.

правда отсутствие других инклудов выше указанных строк я нарыл где-то в сети. самого файла semaphore.h у меня нет. так что везде это может быть по разному
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
27.01.2012, 23:09  [ТС] 24
Не ну я хочу сказать, что всё равно нехорошо как-то я первый раз столкнулся с таким, могли бы и так написать:
C++
1
//#include <sys\types.h>
всё вперёд...

Опять же, это хитрый хидер ибо находится не в инклудах, а не понять где... Узнаю линуксоидов- ты должен это знать потому, что ты должен это знать безусловно!
0
27.01.2012, 23:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2012, 23:09
Помогаю со студенческими работами здесь

arduino ошибка условной компиляции в NewLiquidCrystal
добрый день есть некий 100% рабочий проект на &quot;ардуине&quot; используется &quot;стандартный&quot; 16х2 LCD...

[РЕШЕНО] Директивы условной компиляции в AVRSTUDIO4
Коллеги доброго времени суток! Помогите разобраться с директивами условной компиляции в...

Какие директивы условной компиляции Вы знаете?
2. Какие директивы условной компиляции Вы знаете?

Символ условной компиляции для конфигурации Trial
Создал Конфигурацию для проекта Trial В Проект &gt; Копиляция &gt; Символа условной компиляции для...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru