Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: Вопросы по С/С++ (СИ)

Сообщение baghear »

Это происходит из-за того что вы не подключаете заголовочный файлы (include), необходимые во вновь создаваемом файле.
Нет, с этим все нормально. Каждый модуль это отдельное творение, имеющее свой собственный хедер. И в данном случае в 3-ем модуле подключаю, хедеры от двух других.
Только необходимо, чтобы данный заголовочный файл обрабатывался один раз:
#ifndef TEST_H
#define TEST_H
Это тоже не обсуждается и не влияет на порядок файлов!!
Т.е. в вашем случае правильнее было сказать "порядок подключения заголовочных файлов", насколько я понял из последующей фразы.
Да.
-модуль здорового человека первой директивой #include должен подключать свой собственный .h-файл. Это минимизирует зависимость от контекста включения последнего в других модулях проекта.
Само собой!!мой наставник по Си говорил мне про это)))

У меня ситуация такая
хедер третьего модуля

Код: Выделить всё

#include "fft.h"
#include "UI.h"
#include "xpt2046_spi.h"

подключаемый хедер

Код: Выделить всё

#ifndef _FFT_H_
#define _FFT_H_

#include "ILI9341.h"
подключаемый хедер

Код: Выделить всё

#ifndef _UI_H_
#define _UI_H_

#include "ILI9341.h"
#include "enum.h"
В обоих подключается "ILI9341.h" может ли это как-то влиять?
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

[uquote="baghear",url="/forum/viewtopic.php?p=3354022#p3354022"]В обоих подключается "ILI9341.h" может ли это как-то влиять?[/uquote]
Если header guard-ы (#ifndef/#define/#endif) прописаны то препроцессор вставит содержимое лишь при первом включении - для этого они и существуют. Если файлы включают друг друга - или напрямую или через третьи файлы - то "курица-яйцо" с вариантами и горе если первому нужно знать что-то из второго. а второму - из первого. Нарисуйте на листике граф #include-ов проекта, заметьте в каком месте ошибка, а в каком то определение, "невидимость" которого её вызывает. Сравните с выхлопом препроцессора. Но лучше потратить это время на рефакторинг проекта и сокращение количества связей между модулями.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: Вопросы по С/С++ (СИ)

Сообщение baghear »

Не нашел пока причину и что интересно ошибки какие странные.

Код: Выделить всё

Build target 'Target 1'
compiling main.c...
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6739): error:  #18: expected a ")"
    float32_t 
,
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6737): error:  #141-D: unnamed prototyped parameters not allowed when body is present
    CMSIS_INLINE __STATIC_INLINE float32_t arm_bilinear_interp_f32(
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6805): error:  #18: expected a ")"
    q31_t 
,
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6803): error:  #141-D: unnamed prototyped parameters not allowed when body is present
    CMSIS_INLINE __STATIC_INLINE q31_t arm_bilinear_interp_q31(
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6879): error:  #18: expected a ")"
    q31_t 
,
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6877): error:  #141-D: unnamed prototyped parameters not allowed when body is present
    CMSIS_INLINE __STATIC_INLINE q15_t arm_bilinear_interp_q15(
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6957): error:  #18: expected a ")"
    q31_t 
,
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6955): error:  #141-D: unnamed prototyped parameters not allowed when body is present
    CMSIS_INLINE __STATIC_INLINE q7_t arm_bilinear_interp_q7(
main.c: 0 warnings, 8 errors
compiling dso.c...
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6739): error:  #18: expected a ")"
    float32_t 
,
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6737): error:  #141-D: unnamed prototyped parameters not allowed when body is present
    CMSIS_INLINE __STATIC_INLINE float32_t arm_bilinear_interp_f32(
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6805): error:  #18: expected a ")"
    q31_t 
,
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6803): error:  #141-D: unnamed prototyped parameters not allowed when body is present
    CMSIS_INLINE __STATIC_INLINE q31_t arm_bilinear_interp_q31(
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6879): error:  #18: expected a ")"
    q31_t 
,
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6877): error:  #141-D: unnamed prototyped parameters not allowed when body is present
    CMSIS_INLINE __STATIC_INLINE q15_t arm_bilinear_interp_q15(
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6957): error:  #18: expected a ")"
    q31_t 
,
E:\Keil_v5\ARM\PACK\ARM\CMSIS\5.2.0\CMSIS\Include\arm_math.h(6955): error:  #141-D: unnamed prototyped parameters not allowed when body is present
    CMSIS_INLINE __STATIC_INLINE q7_t arm_bilinear_interp_q7(
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Вопросы по С/С++ (СИ)

Сообщение uldemir »

возможно, у вас есть дефайн, совпадающий с именем или строкой в этом math.h и поэтому такое происходит. и он находится перед этим инклюдом
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: Вопросы по С/С++ (СИ)

Сообщение baghear »

Это похоже на правду

Код: Выделить всё

#ifndef _XPT2046_H_
#define _XPT2046_H_

#include "stm32f3xx.h"

#define CS_TOUCH_LOW   GPIOA->BRR |= GPIO_BRR_BR_4;		//PA4
#define CS_TOUCH_HIGH  GPIOA->BSRRL |= GPIO_BSRR_BS_4;

#define	Y 	0x90
#define	X 	0xD0
А X и Y в библиотеке math достаточно!!!Спасибо!!!

P.s в этом и была проблема, все заработало!!!
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Вопросы по С/С++ (СИ)

Сообщение dosikus »

Код: Выделить всё

#define CS_TOUCH_LOW   GPIOA->BRR |= GPIO_BRR_BR_4;    
#define CS_TOUCH_HIGH  GPIOA->BSRRL |= GPIO_BSRR_BS_4;
Здесь в обоих строчках точка с запятой лишние, иногда приводит к таким труднонаходимым гадостям ...
Да и |= лишнее , достаточно = ...
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Вопросы по С/С++ (СИ)

Сообщение pokk »

Здесь в обоих строчках точка с запятой лишние, иногда приводит к таким труднонаходимым гадостям ...
Можете привести примеры гадостей ? Все время в define ставлю точку с запятой, и как-то ещё не разу не нарвался.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Вопросы по С/С++ (СИ)

Сообщение Ivanoff-iv »

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

Добавлено after 3 minutes 4 seconds:
пример (правда не очень яркий): if (условие) дефайн_1 else дефайн_2;
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

[uquote="pokk",url="/forum/viewtopic.php?p=3357636#p3357636"]Можете привести примеры гадостей ?[/uquote]
Странная просьба. Эти "гадости" сплошь и рядом на форумах встречаются.
Например :

Код: Выделить всё

#define  DATA_PORT    PORTA ;
А потом пытаются что-то записать :

Код: Выделить всё

DATA_PORT = xxx;
И ломают голову об ругань компилятора.
pokk писал(а):Все время в define ставлю точку с запятой
Это у Вас, по всей видимости, ещё мало опыта. Потом уйдёт от Вас эта привычка.
И от точки запятой откажитесь, и do{}while(0) будете ставить в дефайны, ... :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

Я тут на хабре наткнулся на извращенческое программирование на Си...

Код: Выделить всё

	int Ox01 = ~-~-~-~-~-~-~-~-~-' ';
	int Ox02 = ((!true)["true"]-(false)["FALSE"])>>true;
	int Ox03 = 'X'/2/2^!*"";
	int Ox04 = ('0'>>!*"")-!*"";
	int Ox05 = (~'!'-~'~')>>!*"">>(2==1==0);
	int Ox06 = ('|'||'|'|'|')["||||||||"]%*"error";
	int Ox07 = '.'>>!false;
	int Ox08 = '\\'>>('!'>>(1<<2));
	int Ox09 = '/'-'/'/'/'>>'/'/'/';
	int Ox0a = (*"")["yes"]^(*"")["no"];
	int Ox0b = *"yes"^*"no";
	int Ox0c = '0'/2-!*"";
	int Ox0d = ((!'!'+'+')>>true)+(true<<true);
	int Ox0e = (-~true^!false)*(true<<(-~true|!false))-!false;
	int Ox0f = '!'-'^'%*"*";
	int Ox10 = -~*" L"^-~*"5Z";
	int Ox11 = *"Totally" -* "not" +* "0x17" + true;
	int Ox12 = -~!*""*-~!*""*-~!*""*-~!*""*-~!*""+~!*""*-~!*""*-~!*""-true;
	int Ox13 = -compl(-compl true xor true)<<-compl true|'8'>>('1'^'2');
	int Ox14 = '^'>>('<'^'>');
	int Ox15 = *"'"-(' '>>!0);
	int Ox16 = '_'>>-~1;
	int Ox17 = 010-001+010+010;
каждая из вышеописанных переменных имеет значение 0x17
это на само деле так.
но блин!!!! я не понимаю...
первый способ получения этого значения я осилил: операции побитовой инверсии вкупе с изменением знака каждый раз отнимают 1 от исходного числа "пробел", т.е. кода этого символа... 9 попарных сочетаний этих операций и дает нужное число.

ну последний вариант тоже очевиден - восьмеричная система счисления...

но вот дальше следуют варианты, от которых пока просто оторопь... можно попросить знатоков Си последовательно, пример за примером, объяснить, как оно работает? :oops:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ARV",url="/forum/viewtopic.php?p=3358453#p3358453"]

Код: Выделить всё

int Ox02 = ((!true)["true"]-(false)["FALSE"])>>true;
[/uquote]
Упрощаем:

Код: Выделить всё

int Ox02 = (0["true"] - 0["FALSE"]) >> 1;
Строки заменяются адресами и компилятору не особо важно что относительно чего индексировать, т.е. остается ('t' - 'F') >> 1

Код: Выделить всё

int Ox03 = 'X'/2/2^!*"";
Тут вообще все просто: 0x58 / 2 / 2 ^ !0

Код: Выделить всё

int Ox04 = ('0'>>!*"")-!*"";
Аналогично: ('0' >> 1) - 1;

Код: Выделить всё

int Ox05 = (~'!'-~'~')>>!*"">>(2==1==0);
(~'!' - ~'~') >> 1 >> 1

Дальше лень разбираться, похоже все примеры достаточно однотипные...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

после разжёвывания становится всё просто :) в очередной раз я купился на то, что квадратные скобки для индексации массива можно ставить чуть ли не произвольно.

выходит, что str[0] == 0[str]

манипуляции с математикой более-менее понятны, нежели вот это

Код: Выделить всё

int Ox0a = (*"")["yes"]^(*"")["no"];
что такое (*"") - ?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ARV",url="/forum/viewtopic.php?p=3358503#p3358503"]что такое (*"") - ?![/uquote]
Вместо "" будет адрес пустой строки, т.е. *"" дает завершающий 0...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

я не понял, как тут разыменование происходит.

Добавлено after 1 minute 3 seconds:
сцуко, хотя, пожалуй, понял...

В общем... слушайте, детишки: никогда-никогда-никогда так не пишите!!!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

Код: Выделить всё

const char* s = "";
*s;
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: Вопросы по С/С++ (СИ)

Сообщение Psych »

int Ox16 = '_'>>-~1;
-~1 = 2
'_'>>2=0x17
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение WiseLord »

В мне непонятно само int 0x17 = что_то_там;
Вроде же имя переменной с цифры начинается не может, разве не так?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

WiseLord писал(а):Вроде же имя переменной с цифры начинается не может, разве не так?
оно и начинается с буквы O
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение WiseLord »

ах, чёрт.
Ответить

Вернуться в «Разные вопросы по МК»