Форум программистов, компьютерный форум 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-ка ? сабж.. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17305 / 5553 / 347
Регистрация: 30.03.2009
Сообщений: 15,112
Записей в блоге: 26
13.07.2015, 22:19     Как часто приходится манипулировать директивами препроцессора для написания программ на Си++?
Цитата Сообщение от hoggy Посмотреть сообщение
и чем же она является?
Директивой транслятора, потому что её обрабатывает именно транслятор, а не текстовый препроцессор. Хотя у виндузовых компиляторов через директиву #pragma настраиваются библиотеки, так что там вообще непонятно, директивой чего являются некоторые pragm'ы

Цитата Сообщение от DrOffset Посмотреть сообщение
А в стандарте C99, она безоговорочно обозвана директивой препроцессора наравне с остальными
С формальной точки зрения наверное так оно и есть, потому что всё то, что начинается с решётки, обрабатывается препроцессором. Но вся обработка сводится к тому, чтобы директиву без изменения дотащить до транслятора. Какая-нибудь фигня типа "#pragma GCC system_header" понимается только ВНЕ главного файла (т.е. в одном из файлов, подключенных через #include), а потому, вероятно, препроцессор частично за этим следит. Но конечная обработка всё равно остаётся в трансляторе, потому что языковые предупреждения выдаёт именно транслятор (эта прагма нужна именно для работы с предупреждениями)

C
/* Файл t.c */
#define A 1
#pragma STDC FENV_ACCESS ON
#include "t.h"
_Pragma ("abc") qqq
void func (void) { }
C
/* Файл t.h */
#pragma system_header
#line 100 "trampampam.h"
Код
$ gcc t.c -std=c99 -E
# 1 "t.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "t.c"

#pragma STDC FENV_ACCESS ON
# 1 "t.h" 1
#pragma system_header
# 100 "trampampam.h"
# 4 "t.c" 2

# 4 "t.c"
#pragma abc
# 4 "t.c"
 qqq
void func (void) { }
Обрати внимание, что #define, #include, #line и _Pragma, как директивы препроцессора, в саму препроцессорную выдачу не попали (потому что они обрабатываются препроцессором, а не транслятором), а обе прагмы попали (потому что они обрабатываются транслятором, а не препроцессором) плюс #pragma, родившаяся из раскрытия _Pragma

Добавлено через 35 секунд
Цитата Сообщение от hoggy Посмотреть сообщение
потому что во всех источниках пишут - директива
Указание начальства - это тоже директива. И к препроцессору она так же не имеет отношения
 
Текущее время: 06:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru