LINUX.ORG.RU

Как использовать QtCreator для Си?

 , ,


1

3

Как в нем включить подсветку синтаксиса для си а не с++? Даже если прямо в нем создать plain C project он все равно применяет к нему подсветку синтаксиса с++.Расширения файлов тоже игнорируются.

Что конкретно не устраивает:
defined __cplusplus
namespace
bool
virtual

ну и собственно остальные слова из с++. Ломается подсветка синтаксиса из-за чего нельзя увидеть настоящие ошибки. Плюс из-за макроса нельзя видеть какой блок кода выполнится в IFDEF'ах.

★★★★

Зачем использовать C++ слова в С коде?

К тому же тот же bool есть в stdbool.h и имеет тот же смысл что и bool.

Сделать рефакторинг (заменить слова на синонимы) и не создавать проблем там где можно без них обойтись...

fsb4000 ★★★★★ ()
Ответ на: комментарий от fsb4000

Боже, как вы заколебали своим «юзай современный c который поддерживают не все компиляторы, сделай замену, кококо»

Вот тебе ведро линукса. Сам отправишь коммит?
http://lxr.free-electrons.com/source/include/linux/types.h#L29
Вот тебе вижуал студия. Сам встроишь туда полную поддержку c99?
https://www.visualstudio.com/ru/

Плюс проблема сраного макроса __cplusplus

PPP328 ★★★★ ()
Ответ на: комментарий от fsb4000

Зачем использовать C++ слова в С коде?

Затем, что это с, а не с++. В си это не ключевые слова и их можно использовать как угодно.

PPP328 ★★★★ ()
Ответ на: комментарий от PPP328

Вот тебе вижуал студия. Сам встроишь туда полную поддержку c99?

Для тех кто в танке. Официальный ответ Microsoft: Visual studio это C++ компилятор, и они будут работать над тем чтобы полностью соотвествовать стандарту. Возможности c99 будут поддержаны в той мере в которой они требуется для стандарта C++. Если вам нужны возможности с99, то не пишите эти запросы в Visual Studio feature requests, а пишите эти запросы в комитет C++, и если эти возможности войдут в стандарт, то они будут реализованы в Visual Studio.

fsb4000 ★★★★★ ()
Ответ на: комментарий от PPP328

с++ компилятор не поддерживает с99.

И это для тебя неожиданность?

Когда будешь жаловаться, что g++ не поддерживает c99?

fsb4000 ★★★★★ ()
Ответ на: комментарий от PPP328

Да, в KDevelop всё тоже норм. Там тоже Clang:

http://esxi.z-lab.me:666/~exl_lab/screens/kdevelop_c_hs.png

Проблема именно в том, что редактор Qt Creator подсвечивает не через Clang, а через файлы синтаксиса редактора Kate (позорище!!1).

P.S. Проголосовал за баг и подписался.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от fsb4000

Зачем использовать C++ слова в С коде?

В старых проектах такое очень часто встречается.

Кстати, вспомнил, что тоже сталкивался с этим багом в Qt Creator у себя в проекте, слово new подсвечивалось. Пришлось рефакторить код.

http://esxi.z-lab.me:666/~exl_lab/screens/new_keyword.png

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Проблема не в том, что оно другим цветом подсвечивается. Проблема в том что он мне из-за таких слов подсвечивает половину файла красными волнистыми линиями ибо по его мнению там сломан синтаксис.

PPP328 ★★★★ ()
Ответ на: комментарий от PPP328

EXL

Не подтверждаю. УМВР. Правда в pro-файл добавлен QMAKE_CXXFLAGS = -std=gnu11. Без этого он пытается парсить с -std=gnu++11 и выдаёт соответствующую ошибку.

Fedora 25, qtcreator 4.2.1.

Ivan_qrt ★★★★★ ()
Ответ на: комментарий от Ivan_qrt

Но ведь всеравно некорректно работает. Во-первых, подсветка. Во-вторых, сделай две неиспользованные переменные «virtual» и «virtual1»: qtcreator подчеркнет и покажет всплывающую подсказку unused variable только у «virtual1», в «virtual» останется раскрашенным как ключевое слово.

Надо отдать должное, да, «QMAKE_CXXFLAGS = -std=gnu11» на что-то влияет, поведение изменилось.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

подчеркнет и покажет всплывающую подсказку unused variable только у «virtual1», в «virtual» останется раскрашенным как ключевое слово.

Подсвечивает оба.

Расцветка да, косячит. Но ошибки вроде, корректные. А ТС на ошибки жаловался.

Ivan_qrt ★★★★★ ()
Ответ на: комментарий от PPP328

Проблема в том что он мне из-за таких слов подсвечивает половину файла красными волнистыми линиями ибо по его мнению там сломан синтаксис.

Можешь составить такой файлик?

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Прикрепил к багу: https://bugreports.qt.io/secure/attachment/63016/Screenshot - 11.04.2017 - 07...

Правда в pro-файл добавлен QMAKE_CXXFLAGS = -std=gnu11. Без этого он пытается парсить с -std=gnu++11 и выдаёт соответствующую ошибку.

Вообще не вариант, потому что они 1) заявили поддержку cmake, 2) заявили поддержку собственного формата проекта (который с *.includes, *.creator etc) в которых это установить нельзя.

PPP328 ★★★★ ()
Ответ на: комментарий от EXL

Чертовы ЧПУ. Бог дал им номера, зачем так выеживаться?

PPP328 ★★★★ ()
Ответ на: комментарий от PPP328

заявили поддержку cmake

CMAKE_CXX_FLAGS_*, не?

заявили поддержку собственного формата проекта

И там тоже можно изменить CXX_FLAGS. Ты сам-то что используешь?

Ivan_qrt ★★★★★ ()
Последнее исправление: Ivan_qrt (всего исправлений: 1)

Плюс из-за макроса нельзя видеть какой блок кода выполнится в IFDEF'ах.

Если тебе нужно, чтобы qtcreator выделил исполняемый блок кода, выделенный ифдефами, добавь в свой pro файл строку

DEFINES += МАКРО1 МАКРО2 МАКРО3 #и т.д.

и креатор засерит неисполняемый код.

alexku ()
Ответ на: комментарий от PPP328

Проблема не в том, что оно другим цветом подсвечивается. Проблема в том что он мне из-за таких слов подсвечивает половину файла красными волнистыми линиями ибо по его мнению там сломан синтаксис.

Меню->Tools->Options...

В окне в списке слева

C++

Вкладки справа

Code Model

Выбираешь для C и C++ «Qt Creator Built-in» и радуешься, как хорошо оно выглядит.

Ещё пропиши переменную INCLUDEPATH, чтобы он нормально находил все заголовочники, которые ты добавляешь. Тогда и все кастомные типы, которые в них объявлены нормально подсветит и подскажет.

INCLUDEPATH += \
	/usr/include \
	/usr/include/linux \
	/usr/include/i386-linux-gnu \
	/usr/src/linux/include \
	custom \
	inc \
или что там тебе надо
alexku ()
Ответ на: комментарий от alexku

Ещё мне не нравится, что креатор расклладывает .h и .c/cpp файлы в разные папки, поэтому я все файлы помещаю в SOURCE, а HEADERS удаляю.

alexku ()
Ответ на: комментарий от Ivan_qrt

Ты сам-то что используешь?

Последнее.

drwxrwxr-x 3 alex alex  4096 апр 11 12:37 bin
drwxrwxr-x 2 alex alex  4096 апр 11 12:37 build
drwxrwxr-x 9 alex alex  4096 мар 15 13:52 code
drwxrwxr-x 2 alex alex  4096 мар 15 13:52 docs
drwxrwxr-x 2 alex alex  4096 апр 11 12:37 includes
drwxrwxr-x 4 alex alex  4096 мар 15 13:52 scripts
-rw-rw-r-- 1 alex alex   810 мар 15 13:52 yggdrassil.config
-rw-rw-r-- 1 alex alex   622 мар 15 13:52 yggdrassil.creator
-rw-rw-r-- 1 alex alex 14772 апр 10 19:00 yggdrassil.creator.user
-rw-rw-r-- 1 alex alex 11528 апр  3 12:08 yggdrassil.files
-rw-rw-r-- 1 alex alex   621 апр  3 11:59 yggdrassil.includes
-rw-rw-r-- 1 alex alex   976 мар 15 13:52 yggdrassil.subprojects

И куда там чо надо писать?

PPP328 ★★★★ ()
Ответ на: комментарий от alexku

Меню->Tools->Options...
В окне в списке слева
C++
Вкладки справа
Code Model

Тред не читай @ Сразу отвечай

На обоих моделях жопа.

Ещё пропиши переменную INCLUDEPATH, чтобы он нормально находил все заголовочники, которые ты добавляешь.

Да срал он на заголовочники. Даже если делаешь typedef int namespace; он будет орать что синтаксис сломан.

PPP328 ★★★★ ()
Ответ на: комментарий от alexku

Тред не читай @ Сразу отвечай

Он включает автоматом макросы которые включать в си коде не должен.

PPP328 ★★★★ ()
Ответ на: комментарий от PPP328

И куда там чо надо писать?

Ты не только не в состоянии погуглить, как задать CXXFLAGS в твоей сборочной системе, но даже не знаешь, как она называется?

Ivan_qrt ★★★★★ ()
Ответ на: комментарий от PPP328

Ну УМВР даже с Generic Project. На переменные virtual и new не ругается. Без всяких доп. действий.

Нафига пользоваться Generic Project + Makefile, мне не ясно.

Кроме переползания на cmake/qmake/qbs предложить ничего не могу.

Ivan_qrt ★★★★★ ()
Ответ на: комментарий от PPP328

А чем ещё ты собираешь то? Сам по себе generic project ничего собирать не умеет. Он просто make вызывает. Либо я чего-то не понимаю.

Ivan_qrt ★★★★★ ()
Ответ на: комментарий от Ivan_qrt

Он даже make не вызывает. Generic project это когда QtCreator используется в качестве редактора (плюс он создает файлы .creator, .creato.user, .includes etc). Система сборки может быть абсолютно сторонней и никаким боком не связана с make. Задается в Проекты-Сборка-Этапы сборки-Особый.

PPP328 ★★★★ ()
Ответ на: комментарий от EXL

Короче они его закрыли как duplicate, тот на который ссылаются тоже закрыли, сказав что все пофиксили в 4.3-beta, но пофиксили только подчеркивание неверногно синтаксиса, а неправильную подсветку оставили как фичу.

PPP328 ★★★★ ()
Ответ на: комментарий от EXL

Да я видел. Вместо оптимизированной по размеру регистра встроенной strcmp вооот таки костылища

  else if (s[0] == 'e') {
    if (s[1] == 'l') {
      if (s[2] == 's') {
        if (s[3] == 'e') {
          return T_ELSE;
        }
      }
    }

PPP328 ★★★★ ()
Ответ на: комментарий от EXL

Я, к сожалению, не могу заценить новую версию ибо она требует не стоковую под U16.04 Qt. Если у вас есть возможность - не отпишитесь им там?

PPP328 ★★★★ ()
Ответ на: комментарий от EXL

Короче судя по всему они и половины не пофиксили. __cplusplus все развно задефайнен в edit-time.

PPP328 ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.