Visual Studio C++ 2019 + GTK2 + TextAdept [SOLVED]

Здесь обсуждаются темы, косвенно связанные с Far.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Visual Studio C++ 2019 + GTK2 + TextAdept [SOLVED]

Post by citRiks »

ЗАЧЕМ ЭТО НАДО?

прежний заголовок и проблема #3 [SOLVED]:

прежний заголовок и проблема #2 [SOLVED]:
MSVS2019 C/C++ project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix? [SOLVED]
прежний заголовок и проблема #1 [SOLVED]:
GTK2/3/+ in Visual Studio C++ 2019, compile errors [SOLVED]




MSVS C++ 2019.
проект вроде успешно создался CMake-ом отсюда:
https://github.com/textmagus/textmagus
Могу если надо сделать минимальный пример, или выслать проект целиком
Last edited by citRiks on Sun 28 Feb, 2021 09:48, edited 16 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MSVS2019 C++/C-lang project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix?

Post by citRiks »

безуспешно пробовал менять оции проекта "C language standard", "C++ language standard", "Compile as"

на всякий случай "C/C++ all options" проекта (все не влезло)
Last edited by citRiks on Thu 18 Feb, 2021 10:19, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

MSVS2019 C++/C-lang project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix?

Post by HaRT »

По стандарту размер массива должен быть константой времени компиляции, о чём и говорит сообщение об ошибке. В GCC есть нестандартное расширение, чтобы указывать в качестве размера массива ранее определённую переменную, что, похоже, и использовано в этом коде. Вероятно, это же расширение поддержано и clang'ом. Т.ч., возможно, если настроите сборку clang'ом (как, не подскажу) и разрешите (не запретите) нестандартные расширения языка, то будет вам щастье. Ну или просто задавайте конкретное число или constexpr-выражение (C++). Если же размер может оказаться большим, то смотрите в сторону std::vectorа. Для экспериментов с поведением разных компиляторов рекомендую Compiler Explorer.
Last edited by HaRT on Thu 18 Feb, 2021 13:51, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MSVS2019 C++/C-lang project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix?

Post by citRiks »

HaRT,
nrows который задается в качестве размера, декларируется так на 504-й строчке:
https://github.com/textmagus/textmagus- ... log.c#L504
int ncols = 0, nrows = 0, len = 0;
обычная переменная типа ИНТ
HaRT wrote: Thu 18 Feb, 2021 13:48 GCC есть нестандартное расширение, чтобы указывать в качестве размера массива ранее определённую переменную, что, похоже, и использовано в этом коде. Вероятно, это же расширение поддержано и clang'ом. Т.ч., возможно, если настроите сборку clang'ом (как, не подскажу)
интересно очень.
А в "обычном" Visual Studio без "clang"-a этого получается что совсем нельзя ..?
И, вроде там промелькивало где-то требование к GCC.
А можно ли сделать компиляцию в Visual Studio с GCC (=clang?), то тоже не?
а ФАРа компиляция ведь делается же как-то с GCC, кстати.
Значит ли что надо научиться компилировать ФАР с GCC,
и перенести этот опыт на другие частные случаи?
Компиляция в GCC происходит с возможностью дебаггировать потом?
В этом случае мне нужнее дебагирование именно, лишится этогo нельзя
HaRT wrote: Thu 18 Feb, 2021 13:48 Ну или просто задавайте конкретное число или constexpr-выражение (C++)
Если же размер может оказаться большим, то смотрите в сторону std::vectorа.
это число оно переменное, задает там размер диалога в GTK, т.е. изменяемое по определению.
constexpr - это что?
можно ли его приспособить к сценарию с изменямой переменной (nrows) которая размер (высота) диалога,
и как это сделать не переворачивая весь код с ног на голову?
HaRT wrote: Thu 18 Feb, 2021 13:48Для экспериментов с поведением разных компиляторов рекомендую
да, выглядит полезным, спасибо
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MSVS2019 C++/C-lang project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix?

Post by citRiks »

Вот оригинальный MakeFile этого проекта
https://github.com/textmagus/textmagus- ... r/Makefile
Каких-то особых флагов я там не разглядел, вроде только это (?):
gtdialog_flags = -std=c99 -pedantic -W -Wall -Wno-unused
А CMakeLists.txt не должен был их адаптировать сам?
Ну допустим что-то не сработало с CMake-ом,
то как теперь перенести эти флаги в проект Visual Studio?
(там я могу сам догадываться куда их втыкать,
но лучше подскажите куда, чтобы наверняка правильно воткнулись)
Last edited by citRiks on Thu 18 Feb, 2021 14:55, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10866
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

MSVS2019 C++/C-lang project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix?

Post by HaRT »

Прошу прощения, расширенные консультации по C/C++ не входят в мои планы. Тема это огромная, нюансов неимоверное количество, мне этого и на работе хватает.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MSVS2019 C++/C-lang project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix?

Post by citRiks »

HaRT, спасибо за помощь
Оказывается это насчет VLA, V(ariable)L(ength)A(Arrays),
которые запрещены в MSVS, и никак это не обойти, но в других компайлерах разрешены.

Эксперементирую с этим, пока вроде успехи есть:
Вместо:
GtkWidget * entries[nrows]
Делаем:
GtkWidget** entries = malloc(sizeof(GtkWidget*) * nrows);
проект теперь скомпилировался по крайней мере, но ..
2useven10
Posts: 5232
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

MSVS2019 C++/C-lang project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix?

Post by 2useven10 »

citRiks wrote: Fri 19 Feb, 2021 00:14 с остальным реально не знаю что делать
Очевидно, матчасть учить надо.
Или вы надеетесь, что кто-то за вас соберёт проект который вам понадобился?
И к фару всё это имеет хоть какое-нибудь отношение?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MSVS2019 C++/C-lang project: GtkWidget *entries_test[nrows]; // "expected constant expression" error. How to fix?

Post by citRiks »

2useven10 wrote: Fri 19 Feb, 2021 06:20 Или вы надеетесь, что кто-то за вас соберёт проект который вам понадобился?
Ну вроде GTK это относительно популярная весчь,
и есть шанс что у кого-то здесь был опыт что с ней делать и подскажет
2useven10 wrote: Fri 19 Feb, 2021 06:20 И к фару всё это имеет хоть какое-нибудь отношение?
идея была в том чтобы понять как работает весьма приличный редактор TextAdept,
и или пересадить его полностью в ФАР, или перенять оттуда что полезное.
Или подсмотреть как TextAdept использует/интегрирует Scintillа.
Кроме Scintillа и GTK, все остальное там на Луа, что улучшает шансы для обозначеннытх целей.
TextAdept это вроде как оболочка вокруг Scintillа в основном, не сильно сложная прога по идее.
Надо перенять его интерфейсность к Скинтилле, и модули которые к нему написаны.
Например там есть модуль сравнения:
https://github.com/orbitalquark/textade ... /file_diff
я могу переписать все модули, но это возьмет сильно больше времени,
чем если бы можно было в принципе пересадить это сразу все на почву ФАРа.
Scintillа+TextAdept это лучшая после Вим редакторная система,
и менее сложная/лучше адаптируемая для ФАРа.
Автор TextAdept (Митчелл) настроен к означенным целям дружелюбно,
но в VisualStudio не понимает ровно ничего, для Windows компилирует в MingW.
Но в MingW нет дебаггера для меня, я знаю более-менее VisualStudio лишь.
Если бы удалось победить компиляцию GTK в VisualStudio,
то означенные цели были бы весьма реальны, на благо общества
2useven10
Posts: 5232
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

GTK2/3/+ in Visual Studio C++ 2019, compile errors

Post by 2useven10 »

citRiks wrote: Fri 19 Feb, 2021 12:29 Если бы удалось победить компиляцию GTK в VisualStudio,
то означенные цели были бы весьма реальны, на благо общества
если надо побеждать, вы зря тратите время.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

GTK2/3/+ in Visual Studio C++ 2019, compile errors

Post by citRiks »

2useven10 wrote: Fri 19 Feb, 2021 15:50 если надо побеждать, вы зря тратите время.
Прошу пояснить вашу мысль.. ?
2useven10
Posts: 5232
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

GTK2/3/+ in Visual Studio C++ 2019, compile errors

Post by 2useven10 »

Куда уж яснее - 'Широко шагаешь - штаны порвешь'
Post Reply

Return to “Операционные системы, командные оболочки и прочее”