Перейти к содержанию
    

Не могу объявить нулевой указатель на функцию

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

Да, и лично я не считаю Кейл хорошей IDE. Про крайней мере, по состоянию на то время, когда я ею пользовался. Быть может, сейчас ченить допилили. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, EdgeAligned said:

Подведу итог - IDE бывают разные, с разными особенностями и настройками

Вот уж открыли америку!

Напомню, речь была изначально была про простое переименование расширения файла. А как и в какой среде это делается - это вторично. Что ж теперь нельзя писать "кейл", чтобы никого не заагрить случайно?

 

К слову, тот же кейл сам меняет ключи компиляции в зависимости от выбранной общей настройки языка файла, компилятор один и тот же, физически вызывается один и тот же файл компилятора *.exe:

голый С:
-xc -std=c11 --target=arm-arm-none-eabi -mcpu=cortex-m0plus -c -fno-rtti -funsigned-char

плюсы:
 -xc++ -std=c++17 --target=arm-arm-none-eabi -mcpu=cortex-m0plus -c -fno-rtti -funsigned-char -fno-exceptions

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Forger said:

что например может не понравится плюсовому компилятору в С исходнике?

Будете пользоваться С++, тогда и узнаете. Сейчас-то это зачем?

И термин "обратная совместимость" со стороны С++ к С означает то, что если С-программа написана в соответствии с требованиями С++, то она соберётся без ошибок компиляторами обоих языков. А вот если не знать о различиях С и С++ и тупо предложить "плюсАм" собрать переименованную сишную прогу, то компилятор С++ много и смачно выругается об уровне ваших знаний языка.

Изменено пользователем tonyk_av

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, tonyk_av said:

тупо предложить "плюсАм" собрать переименованную сишную прогу, то компилятор С++ много и смачно выругается об уровне ваших знаний языка.

вы пробовали это сделать или это просто голословное имхо?

и при чем тут МОИ знания языка?

 

18 minutes ago, tonyk_av said:

Будете пользоваться С++, тогда и узнаете. 

походу вы ошиблись адресатом, я уже много лет пишу исключительно на плюсах и у себя проверил первый попавшийся сторонний с-исходник - компилятор одинаково их понимает в обоих режимах

чтобы делать такие утверждения, вы это сделали? видимо нет, но ведькак-то отметиться хочеться, не правда ли? 😉 

 

18 minutes ago, tonyk_av said:

если С-программа написана в соответствии с требованиями С++

какая-то отсебятина пошла, уже неинтересно

да и вообще пошел отборный оффтоп

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Forger said:

вы пробовали это сделать или это просто голословное имхо?

Имею опыт переноса проектов с С на С++.

2 hours ago, Forger said:

и при чем тут МОИ знания языка?

При том, что звучат такие сентенции:

image.thumb.png.0552b809e65dd11ae1e81fadbb0fe8f2.png

2 hours ago, Forger said:

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

Просто соберите HAL "плюсовым" компилятором, он ведь на С написан.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, tonyk_av said:

Просто соберите HAL "плюсовым" компилятором, он ведь на С написан.

Речь изначально шла про компиляцию, а не сборку. Разницу понимаете?

4 minutes ago, tonyk_av said:

соберите HAL "плюсовым" компилятором, он ведь на С написан.

путаете: компилятор не собирает, он только компилирует файлы, а собирает линкер

у меня HAL прекрасно компилируется

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Forger said:

у меня HAL прекрасно компилируется

После простого переименования *.c в *.сpp? Да ну.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, tonyk_av said:

Да ну.

да, что логично - компилятор имеет обратную совместимость, что указано "на каждом заборе"

на примере компилятора v6.21 от ARM:

первый попавшийся файл тупо переименовал и добавил в дерево проекта, он автоматом подцепился как cpp

*** Using Compiler 'V6.21', folder: 'C:\Keil\ARM\ARMCLANG\Bin'
compiling stm32g0xx_hal.cpp...
"C:/Keil/ARM/PACK/Keil/STM32G0xx_DFP/1.4.0/Drivers/STM32G0xx_HAL_Driver/Src/stm32g0xx_hal.cpp" - 0 Error(s), 0 Warning(s).

 

 

не знаю, какой смысл так делать, ибо у себя такие сторонние файлы ВСЕГДА оставляю как есть, конечно с родным расширением, а уже в своем плюсовом коде использую доступ к функциям из этих чужих файлов через классическую конструкцию:

Quote

extern "C++" {}

 

не пойму, что у вас там за титанические труды по переводу сишного кода на плюсовый компилятор, но тут ничего не надо делать, видимо набиваете себе цену перед работодателем, но это не мое дело )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 minutes ago, Forger said:

видимо набиваете себе цену перед работодателем, но это не мое дело )))

Не нужно по себе людей судить.

51 minutes ago, Forger said:

не пойму, что у вас там за титанические труды по переводу сишного кода на плюсовый компилято

Изначально проект начинался на С.

56 minutes ago, Forger said:

да, что логично - компилятор имеет обратную совместимость, что указано "на каждом заборе"

В С++ стало возможно инициализировать структуры как в С, например?

56 minutes ago, Forger said:
compiling stm32g0xx_hal.cpp...

g++ HAL для F4 не компилировал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 minutes ago, tonyk_av said:

В С++ стало возможно инициализировать структуры как в С, например?

уже стало, но (since C++20): https://en.cppreference.com/w/cpp/language/aggregate_initialization

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, tonyk_av said:

В С++ стало возможно инициализировать структуры как в С, например?

ага, типа раньше было нельзя

давайте уже в конце концов ближе к делу - конкретный пример на С, который в плюсах у вас не компилируется, будем вместе разбираться что к чему, а то ходите все вокруг да около )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все-таки, не все Сишное скомпилится без доработок напильником в C++😉

У меня дежавю, что недавно это уже обсуждалось, видимо, колесо фортуны снова делает свой оборот...))

https://electronix.ru/forum/topic/161540-plavnyy-perehod-c-c-pod-mk/?do=findComment&comment=1752759

https://electronix.ru/forum/topic/161540-plavnyy-perehod-c-c-pod-mk/?do=findComment&comment=1756371

https://electronix.ru/forum/topic/161540-plavnyy-perehod-c-c-pod-mk/?do=findComment&comment=1757683

https://electronix.ru/forum/topic/161540-plavnyy-perehod-c-c-pod-mk/?do=findComment&comment=1758102

- еще вспомнить ошибки компиляции при неявных приведениях enums к int, и вообще 100500 способов невозможных приведений в стиле Си;

- в C++ нельзя пользоваться FAM (гибкими массивами) в конце структур;

https://electronix.ru/forum/topic/161540-plavnyy-perehod-c-c-pod-mk/?do=findComment&comment=1849899

- приколы с пустой структурой в структуре - будет занимать 1 байт в соответствии со стандартом;

- ...и еще 100500 ситуаций, перешедших в разряд UB в плюсах, что было легальным в Си.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/20/2024 at 9:37 PM, Forger said:

ага, типа раньше было нельзя

давайте уже в конце концов ближе к делу - конкретный пример на С, который в плюсах у вас не компилируется, будем вместе разбираться что к чему, а то ходите все вокруг да около )

 

sizeof('A')

И в Си и в С++ скомпилируется, но результат будет разным.

On 2/20/2024 at 10:09 PM, Arlleex said:

- в C++ нельзя пользоваться FAM (гибкими массивами) в конце структур;

Вы про это ?

struct{
  int a;
  short b;
  chat c[];
};

Если да, то я постоянной такое применяю и в С++ тоже.
Для всяких протокольных вещей.
И компилятор С++ просто предупреждение выдает, но не ошибку. Но код работает при этом исправно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, dimka76 сказал:

И компилятор С++ просто предупреждение выдает, но не ошибку. Но код работает при этом исправно.

Потому что то это оставлено в качестве расширения в Вами используемом компиляторе, потому что в C++ FAM-ы не поддерживаются🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, dimka76 said:

И в Си и в С++ скомпилируется, но результат будет разным.

в плюсах выходит sizeof('A') = 1, неужели в С больше? :shok:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...