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

Как часто приходится манипулировать директивами препроцессора для написания программ на Си++? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Безопасная работа с памятью в OpenMP С++ http://www.cyberforum.ru/cpp-beginners/thread1498291.html
Добрый день. Вопрос связан с тем как можно добавлять элементы к общему динамическому массиву в параллельных потоках. По сути задачи приходится к созданному многомерному vector добавлять новые элементы. Пусть есть, например, vector<vector<int>> A. Первая размерность уже проинициализрована полностью (например, 0-N-1). Есть гарантия, что внутри потоков происходит обращение к собственному набору...
C++ Генерация и проверка серийного номера, как реализовать? Мне нужно, скажем так, защитить программу - написать функцию генерации и проверки уникального серийного номера для каждой копии программы. Пока не совсем понимаю, в каком направлении копать. Я знаю, что как-то можно получить ID процессора или винчестера и отталкиваться от этого. (А если, скажем программа на виртуалке будет запущена, то id оборудования там будут одинаковые?) http://www.cyberforum.ru/cpp-beginners/thread1498282.html
While в while C++
здравствуйте, я только начала изучать C++, с простыми циклами все понятно, а вот вложенные циклы туговато доходят. пожалуйста объясните данный код (желательно каждую строчку)) int i=0; int j=0; int num=0; while (i<10) { while (j<10) { num++; j++;
C++ Конструктор с параметром C++
Приветствую! Изучая одну литературу столкнулся с конструктором в котором мне не понятен синтаксис т.к. во время обучения самого С++ не сталкивался с ним. Объясните пожалуйста. struct func { int& i; func(int& i_) : i(i_) {}//собственно конструктор который не понятен, объясните как он работает, и если можно напишите аналог void operator() () { ...
C++ Контейнер map с сохранением порядка вставки элементов http://www.cyberforum.ru/cpp-beginners/thread1498271.html
Можно ли в контейнере расположить ключи так, чтобы они не были отсортированы в порядке убывания или возрастания. Например я ложу в контейнер такие ключи: map<string,string> st; st.insert(make_pair("A","A1")); st.insert(make_pair("C","C1")); st.insert(make_pair("B","B1")); Но "map" располагает ключи в алфавитном порядке автоматически, то есть: A:A1 B:B1
C++ Можно ли узнать, каким компилятором была собрана ты или иная DLL-ка ? сабж.. подробнее

Показать сообщение отдельно
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
14.07.2015, 12:12     Как часто приходится манипулировать директивами препроцессора для написания программ на Си++?
Цитата Сообщение от Evg Посмотреть сообщение
Указание начальства - это тоже директива. И к препроцессору она так же не имеет отношения
это не ответ, поскольку ничего не объясняет.

а объяснение здесь заключается в том:
если это не директива, тогда что это? и чем это отличается от директивы.

лично я готов согласиться с вами и даже наплевать на любую формальную терминологию.
но мне нужно понимать на чем основывается ваша точка зрения.


Цитата Сообщение от Evg Посмотреть сообщение
Директивой транслятора, потому что её обрабатывает именно транслятор, а не текстовый препроцессор. Хотя у виндузовых компиляторов через директиву #pragma настраиваются библиотеки, так что там вообще непонятно, директивой чего являются некоторые pragm'ы
а вот это уже ответ.

однако меня смущает как минимум один момент:

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

но тем не менее это возможно.
вы же не будете утверждать,
что пропроцессор не занимается подстановками текста (раскрытием макросов) ?


рассмотрим рецепт изготовления
"кросс-платформенного точечного подавления предупреждений компилятора"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//pragma_warning.h
 
#pragma once
 
#if defined(__GNUC__) || defined(__MINGW__) || defined(__MINGW32__)
    #define WRN_UNUSED_VARIABLE         "-Wunused-variable"
    #define WRN_UNREFERENCED_VARIABLE   WRN_UNUSED_VARIABLE
#elif defined(_MSC_VER)
    #define WRN_UNUSED_VARIABLE         4100
    #define WRN_UNREFERENCED_VARIABLE   4101
#endif
 
 
#define STRINGIFY_(a) #a
#define STRINGIFY(a) STRINGIFY_(a)
 
#if defined(__GNUC__) || defined(__MINGW__) || defined(__MINGW32__)
 
    #define TODO(x) \
        _Pragma( STRINGIFY_(message "in file:" ))           \
        _Pragma( STRINGIFY_(message STRINGIFY(__FILE__) "(" STRINGIFY(__LINE__) ")" ))  \
        _Pragma( STRINGIFY_(message #x))
 
    #define PRAGMA_DISABLE_WARNING(warning_type) \
        _Pragma( STRINGIFY_(GCC diagnostic ignored warning_type) )
 
    #define PRAGMA_PUSH \
        _Pragma( "GCC diagnostic push" )
 
    #define PRAGMA_POP \
        _Pragma( "GCC diagnostic pop" )
 
#elif defined(_MSC_VER)
 
    #define TODO(x) \
        __pragma(message("in file:\n" __FILE__ "(" STRINGIFY(__LINE__) "):\nmessage: " x))
 
    #define PRAGMA_DISABLE_WARNING(warning_type) \
        __pragma(warning(disable: warning_type))
 
    #define PRAGMA_PUSH \
        __pragma(warning(push))
 
    #define PRAGMA_POP \
        __pragma(warning(pop))
 
#else
    error: compiler not support
#endif

использование:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
PRAGMA_PUSH
PRAGMA_DISABLE_WARNING(WRN_UNREFERENCED_VARIABLE)
TEST(TEST_CASE_NAME, TEST_NUMBER(002))
{
    // подавляем предупреждения компилятора
    // о не используемых переменных
 
    // должно единообразно работать на тулсетах cl/gcc/mingw/clang
    int a1 =10;
    int a2 =10;
    int a3 =10;
}
PRAGMA_POP
как вы можете прокомментировать ситуацию,
что прагму можно задействовать изнутри макросов?
 
Текущее время: 00:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru