Size: a a a

2020 June 30

w

weakSB in pro.cxx
Спасибо большое  ,  в общем

Вроде как, у Eclipse имеется api, сейчас покурю нельзя ли через него такое провернуть )
источник

w

weakSB in pro.cxx
Переслано от Владислав Голец...
То он покажет место инициализации
источник

IZ

Ilia Zviagin in pro.cxx
weakSB
Приветствую
Не подскажите инструмент
Имеется исходный код c/ с++ программы

С таким фрагментом, например: fopen(somefile,"wb+");

Где somefile - это, например, #define somefile file.txt определенный в другом файле

А хочется посмотреть уже "раскрытое" значение
Чтобы результат был в духе fopen("file.txt".....);
??))
А зачем? Это не нужно никогда
источник

ВГ

Владислав Голец... in pro.cxx
Ну вот человеку нужно)
источник

IZ

Ilia Zviagin in pro.cxx
weakSB
Приветствую
Не подскажите инструмент
Имеется исходный код c/ с++ программы

С таким фрагментом, например: fopen(somefile,"wb+");

Где somefile - это, например, #define somefile file.txt определенный в другом файле

А хочется посмотреть уже "раскрытое" значение
Чтобы результат был в духе fopen("file.txt".....);
??))
Вообще, многие компиляторы имеют специальный ключ чтобы показать код после препроцессора.
Но там обычно очень непросто разбираться
источник

IZ

Ilia Zviagin in pro.cxx
weakSB
Приветствую
Не подскажите инструмент
Имеется исходный код c/ с++ программы

С таким фрагментом, например: fopen(somefile,"wb+");

Где somefile - это, например, #define somefile file.txt определенный в другом файле

А хочется посмотреть уже "раскрытое" значение
Чтобы результат был в духе fopen("file.txt".....);
??))
MSVC - -P
источник

OS

Oleksandr Senkovych in pro.cxx
привет, а можно так сделать чтоб препроцессор падал с ошибкой если переменная не определена в
#if
конструкции? Например чтоб такой код падал если INVALID_VARIABLE_NAME не определен
#if INVALID_VARIABLE_NAME
источник

VS

Vladimir SHCHerba in pro.cxx
Oleksandr Senkovych
привет, а можно так сделать чтоб препроцессор падал с ошибкой если переменная не определена в
#if
конструкции? Например чтоб такой код падал если INVALID_VARIABLE_NAME не определен
#if INVALID_VARIABLE_NAME
источник

АК

Александр Караев... in pro.cxx
Oleksandr Senkovych
привет, а можно так сделать чтоб препроцессор падал с ошибкой если переменная не определена в
#if
конструкции? Например чтоб такой код падал если INVALID_VARIABLE_NAME не определен
#if INVALID_VARIABLE_NAME
способ однозначно есть, когда-то читал о нём, но не помню.
какая-то макросная магия
источник

w

weakSB in pro.cxx
Спасибо

Но там немного не раскрывается информация, если аргументы - указатели

Дэфайны хорошо раскрываются, конечно
источник

w

weakSB in pro.cxx
Переслано от Ilia Zviagin
Вообще, многие компиляторы имеют специальный ключ чтобы показать код после препроцессора.
Но там обычно очень непросто разбираться
источник

OS

Oleksandr Senkovych in pro.cxx
про error я знаю. Мне чуток не то нужно. У меня есть билд система которая генерирует хедер с кучей
#define CONFIG_KEY CONFIG_VALUE

Я хотел бы чтоб если я сделаю опечатку в названии дефайна чтобы оно не собиралось, при этом чтоб не писать простыню. Например в идеале если у меня есть код
#if CONFIG_PTHREAD
#include <pthread>
#endif

я хотел бы чтоб препроцессор валился если CONFIG_PTHREAD не определен. Я согласен написать обертку вокруг названия переменной
#if CHECK_CONFIG(CONFIG_PTHREAD)
#include <pthread>

но я не хочу писать простыни типа
#ifdef CONFIG_PTHREAD
#if CONFIG_PTHREAD
#include <pthread>
#endif
#else
#error "Invalid variable name"
#endif
источник

AD

Andrey Davydov in pro.cxx
Oleksandr Senkovych
про error я знаю. Мне чуток не то нужно. У меня есть билд система которая генерирует хедер с кучей
#define CONFIG_KEY CONFIG_VALUE

Я хотел бы чтоб если я сделаю опечатку в названии дефайна чтобы оно не собиралось, при этом чтоб не писать простыню. Например в идеале если у меня есть код
#if CONFIG_PTHREAD
#include <pthread>
#endif

я хотел бы чтоб препроцессор валился если CONFIG_PTHREAD не определен. Я согласен написать обертку вокруг названия переменной
#if CHECK_CONFIG(CONFIG_PTHREAD)
#include <pthread>

но я не хочу писать простыни типа
#ifdef CONFIG_PTHREAD
#if CONFIG_PTHREAD
#include <pthread>
#endif
#else
#error "Invalid variable name"
#endif
#if CONFIG_PTHREAD
#include <pthread>
#elif !defined(CONFIG_PTHREAD)
#error bla-bla
#endif
источник

OS

Oleksandr Senkovych in pro.cxx
Andrey Davydov
#if CONFIG_PTHREAD
#include <pthread>
#elif !defined(CONFIG_PTHREAD)
#error bla-bla
#endif
у меня в else тоже может быть что-то. к тому же все равно убого
источник

O

Ofee in pro.cxx
Andrey Davydov
#if CONFIG_PTHREAD
#include <pthread>
#elif !defined(CONFIG_PTHREAD)
#error bla-bla
#endif
Я думаю, суть в том, что не хотелось бы перепечатывать имя переменной повторно, поскольку это не решает поставленной проблемы.

Кажется, с определением ошибок в именах макросов могли бы помочь статические анализаторы, но это всё ещё не совсем нужное решение
источник

АК

Александр Караев... in pro.cxx
Oleksandr Senkovych
про error я знаю. Мне чуток не то нужно. У меня есть билд система которая генерирует хедер с кучей
#define CONFIG_KEY CONFIG_VALUE

Я хотел бы чтоб если я сделаю опечатку в названии дефайна чтобы оно не собиралось, при этом чтоб не писать простыню. Например в идеале если у меня есть код
#if CONFIG_PTHREAD
#include <pthread>
#endif

я хотел бы чтоб препроцессор валился если CONFIG_PTHREAD не определен. Я согласен написать обертку вокруг названия переменной
#if CHECK_CONFIG(CONFIG_PTHREAD)
#include <pthread>

но я не хочу писать простыни типа
#ifdef CONFIG_PTHREAD
#if CONFIG_PTHREAD
#include <pthread>
#endif
#else
#error "Invalid variable name"
#endif
Я правильно понимаю, что CONFIG_PTHREAD - это или 0, или 1?
источник

OS

Oleksandr Senkovych in pro.cxx
Александр Караев
Я правильно понимаю, что CONFIG_PTHREAD - это или 0, или 1?
да
источник

АК

Александр Караев... in pro.cxx
Oleksandr Senkovych
про error я знаю. Мне чуток не то нужно. У меня есть билд система которая генерирует хедер с кучей
#define CONFIG_KEY CONFIG_VALUE

Я хотел бы чтоб если я сделаю опечатку в названии дефайна чтобы оно не собиралось, при этом чтоб не писать простыню. Например в идеале если у меня есть код
#if CONFIG_PTHREAD
#include <pthread>
#endif

я хотел бы чтоб препроцессор валился если CONFIG_PTHREAD не определен. Я согласен написать обертку вокруг названия переменной
#if CHECK_CONFIG(CONFIG_PTHREAD)
#include <pthread>

но я не хочу писать простыни типа
#ifdef CONFIG_PTHREAD
#if CONFIG_PTHREAD
#include <pthread>
#endif
#else
#error "Invalid variable name"
#endif
есть простой способ - заменить все макросы на функциональные:
#define CONFIG_PTHREAD() 1

#if CONFIG_PTHREAD()
// defined
#else
// not defined
#endif
источник

A

Alex in pro.cxx
Есть структура с тремя векторами внутри. Типы одинаковые, просто три отдельных контейнера. Какой самый быстрый и краткий способ написать для структуры сквозной итератор по этим трём контейнерам?

Вижу только вариант самому писать класс iterator, в нём хранить ссылку на родительскую структуру и сквозной индекс, и самому реализовывать все нужные методы итератора. Получается просто, но длинно. И итераторы "тяжелые", поскольку нужно хранить ссылку на родителя.
источник

АК

Александр Караев... in pro.cxx
Alex
Есть структура с тремя векторами внутри. Типы одинаковые, просто три отдельных контейнера. Какой самый быстрый и краткий способ написать для структуры сквозной итератор по этим трём контейнерам?

Вижу только вариант самому писать класс iterator, в нём хранить ссылку на родительскую структуру и сквозной индекс, и самому реализовывать все нужные методы итератора. Получается просто, но длинно. И итераторы "тяжелые", поскольку нужно хранить ссылку на родителя.
храни ссылку на структуру, а не на каждый контейнер отдельно
источник