xc8 и degenerate unsigned comparison

Поклонники продукции Microchip Technology Inc тусуются тут.
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

xc8 и degenerate unsigned comparison

Сообщение fsmoke »

Пишу код, никого не трогаю и вдруг бамс варнинг degenerate unsigned comparison

Я пишу на си(вернее на с++) уже 16 лет, а тут какой-то варнинг

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

for (int16_t i = 255; i >= 0; i -= 8) // вот здесь ругаетцо
{
}
Что, что он от меня хочет?? Думал с ума схожу взял gcc - скомпилил этот кусок - нет никаких варнингов, да и быть не может, что за дичь с микрочиповским компилятором

ПС
компиль xc8
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: xc8 и degenerate unsigned comparison

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

Дичь у вас в голове, от неумения читать документацию.
Реклама
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

[uquote="Аlex",url="/forum/viewtopic.php?p=3657346#p3657346"]неумения читать документацию.[/uquote]
Очень хорошо...начало положено. Только хотелось бы услышать подробности. Просто кинуться подобными фразами и уйти в закат - это конечно круто, но я считаю, что по стандарту си - ошибки тут не должно быть. И про какую документацию идёт речь? Даташит-не имеет ничего общего с си. Дока по XC8 - ну я её читал - можт конечно пропустил чего. Ну тыкните меня носом - раз уж так уверены.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: xc8 и degenerate unsigned comparison

Сообщение КРАМ »

Варнинг не является ошибкой. Варнинг предупреждает о возможной ПРИ ОПРЕДЕЛЕННЫХ УСЛОВИЯХ ошибке.
Реклама
Эиком - электронные компоненты и радиодетали
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

Это вообще пять! Уважаемый, Вы действительно думаете, что я не знаю, что такое варнинг. А вы знаете, что в нормальном проекте не должно быть даже варнингов! Даже опция такая есть treat warnings as errors, чтоб вычистить код.
Реклама
Аватара пользователя
A. Fig Lee
Потрогал лапой паяльник
Сообщения: 306
Зарегистрирован: Сб мар 17, 2012 20:31:44
Откуда: Нью Йорк

Re: xc8 и degenerate unsigned comparison

Сообщение A. Fig Lee »

Автор, запости точное определение че тебе сказали.
Я хоть и меньше 30 лет на с/с++, но вижу что компайлер волну гонит.
Нет тут ансайнед
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: xc8 и degenerate unsigned comparison

Сообщение oleg110592 »

[uquote="fsmoke",url="/forum/viewtopic.php?p=3657034#p3657034"]взял gcc - скомпилил этот кусок - нет никаких варнингов[/uquote]
GCC с опцией -ansi:
Изображение
может:
MPLAB® XC8 C CompilerUser’s Guide
5.2ANSI C STANDARD ISSUESThis compiler conforms to the ISO/IEC 9899:1990 Standard for programming lan-guages. This is commonly called the C90 Standard. It is referred to as the ANSI C Standard in this manual.Some violations to the ANSI C Standard are discussed in this section, as well as some features from the later standard C99 that are supported.
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

По теме
Переписал этот код следующим образом:

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

int16_t i = 255;
while (i >= 0)
{

	i -= 8;
}
Варнинг исчез, моё личное мнение в двух этих случаях код генерируемый компилятором должен быть идентичен(кроме, разве что области видимости переменной i). Похоже на ошибку компилятора, буду писать в микрочип, возможно удастся выяснить подробности
A. Fig Lee писал(а):может:
MPLAB® XC8 C CompilerUser’s Guide
.

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

А теперь не по теме (заранее прошу прощения у администрации сайта и модераторов):
Наконец то добрался до компа - теперь могу излить всё что я увидел в этом посте.
Первое - неадекватное поведение г-на модератора с его фразой
Аlex писал(а):Дичь у вас в голове.
.

Г-н Модератор Alex Заметьте я не переходил на личности в отличие от Вас. Вы не только не аргументировали свою фразу, но и не удосужились появиться, когда я ответил на Ваш выпад.
Ещё раз повторюсь: я являюсь руководителем департамента разработки в одной крупной компании России(я напишу Вам личное сообщение в какой именно, надеюсь Вы не опуститесь до разглашения подобных конфиденциальных подробностей). В бытность свою принимал участи в консультировании разработки некоторых больших зарубежных продуктов (в их числе, знакомый на данном ресурсе, Altium). И само собой я давным давно являюсь синьором в области языка С++. А уж язык СИ и его стандарты я знаю вдоль и поперёк. Поэтому подобное поведение, тем более на должности модератора не приемлемо.

И не важно кем являюсь я, сам по себе переход на личности рождает зерно сомнения в адекватности принимаемых Вами решения на должности модератора.

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

Второе - господа заминусившие моё сообщение - очевидно вы последовали примеру г-на Alex и не поняли того, что я пытался осветить в стартовом посте.

ПС
Прошу прощения если вдруг кого-то задел своими заявлениями.

Добавлено after 17 minutes 25 seconds:
[uquote="A. Fig Lee",url="/forum/viewtopic.php?p=3657869#p3657869"]Автор, запости точное определение че тебе сказали.[/uquote]

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

Код прикрепил - собственно он пустой :)

main состоит из нескольких строк:

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

#include <xc.h>
#include <stdint.h>

_Noreturn void main()
{
	for (int16_t i = 255; i >= 0; i-=8)
	{
	
	}
}
ПС
Компилятор xc8 2.05, тестовый проект в аттаче
Вложения
TestWarning.X.7z
(7.21 КБ) 208 скачиваний
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: xc8 и degenerate unsigned comparison

Сообщение oleg110592 »

в гугле полно жалоб на "degenerate unsigned comparison" - не изучал
так нормально

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

for (int16_t i = 255; i >= -1; i -= 8) 
значит "0" unsigned :))
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

[uquote="oleg110592",url="/forum/viewtopic.php?p=3658045#p3658045"]в гугле полно жалоб на "degenerate unsigned comparison"[/uquote]

Изучал. Но все они связаны с действительно детскими ошибками сравнения беззнакового со знаковым - т.е. логчно что будет варнинг.

[uquote="oleg110592",url="/forum/viewtopic.php?p=3658045#p3658045"]так нормально

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

for (int16_t i = 255; i >= -1; i -= 8) 
значит "0" unsigned :))[/uquote]

действительно i >= -1 - не генерирует варнинг

А

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

for (int16_t i = 255; i > -1; i-=8)

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

for (int16_t i = 255; i > (int16_t)0; i-=8)
Всё равно ругается, имхо всё равно что-то тут не чисто с компилем, нужно бы изучить выходные листинги - возможно действительно генерируется невалидный код
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: xc8 и degenerate unsigned comparison

Сообщение pyzhman »

А если не 255, а, скажем, 248 ему дать?
Docendo discimus
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

[uquote="pyzhman",url="/forum/viewtopic.php?p=3658062#p3658062"]скажем, 248 ему дать?[/uquote]

аналогично - сейчас проверил

а вот если написать 2550 например, т.е. любое число больше границы байта - варнинг исчезает. Чудеса. Имхо оптимизатор, что-то не корректно оптимизирует
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: xc8 и degenerate unsigned comparison

Сообщение oleg110592 »

в листинге вроде хорошо - бит знака похоже проверяет xc8 1.42:

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

;main.c: 5: for (int16_t i = 255; i >= 0; i -= 8)
	movlw	0FFh
	movwf	(main@i)
	clrf	(main@i+1)
	
l483:	
;main.c: 6: {
	movlw	-8
	addwf	(main@i),f
	skipc
	decf	(main@i+1),f
	
l485:	
	btfss	(main@i+1),7
	goto	u21
	goto	u20
u21:
	goto	l483
u20:
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

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

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

;psect for function _main
   221  07E7                     _main:	
   222  07E7                     l611:	
   223                           ;incstack = 0
   224                           ; Regs used in _main: [wreg+status,2+status,0]
   225                           
   226                           
   227                           ;main.c: 7:  for (int16_t i = (int16_t)255; i >= 0; i-=8)
   228  07E7  30FF               	movlw	255
   229  07E8  00F0               	movwf	main@i
   230  07E9  01F1               	clrf	main@i+1
   231  07EA                     l7:	
   232                           
   233                           ;main.c: 8:  {;main.c: 9:   RA0 = i & 1;
   234  07EA  1C70               	btfss	main@i,0
   235  07EB  2FF0               	goto	u10
   236  07EC  1283               	bcf	3,5	;RP0=0, select bank0
   237  07ED  1303               	bcf	3,6	;RP1=0, select bank0
   238  07EE  1405               	bsf	5,0	;volatile
   239  07EF  2FF3               	goto	l617
   240  07F0                     u10:	
   241  07F0  1283               	bcf	3,5	;RP0=0, select bank0
   242  07F1  1303               	bcf	3,6	;RP1=0, select bank0
   243  07F2  1005               	bcf	5,0	;volatile
   244  07F3                     l617:	
   245                           
   246                           ;main.c: 10:  }
   247  07F3  30F8               	movlw	-8
   248  07F4  07F0               	addwf	main@i,f
   249  07F5  1C03               	skipc
   250  07F6  03F1               	decf	main@i+1,f
   251  07F7  1FF1               	btfss	main@i+1,7
   252  07F8  2FEA               	goto	l7
   253  07F9  120A  118A  2800   	ljmp	start
   254  07FC                     __end_of_main:	
   255  007E                     btemp	set	126	;btemp
   256  007E                     wtemp0	set	126
Единственное я добавил элементарный код, чтоб оптимизатор не выбрасывал цикл

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

for (int16_t i = (int16_t)255; i >= 0; i-=8)
	{
		RA0 = i & 1;
	}
Добавлено after 10 minutes 22 seconds:
кому интересно создал топик на микрочиповском форуме

https://www.microchip.com/forums/m11032 ... tree=false
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: xc8 и degenerate unsigned comparison

Сообщение oleg110592 »

по листингу похоже нормально - практически как v 1.42.
Компилятор SDCC (3.9 свежий) на конструкцию вообще не ругнулся

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

    for (int16_t i = 255; i >= 0; i -= 8)
    {
        PORTCbits.RC0 = (uint8_t)i & 1;
    }
листинг немного по другому но похоже

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

;	.line	32; "main.c"	for (int16_t i = 255; i >= 0; i -= 8)
	MOVLW	0xff
	MOVWF	r0x1005
	CLRF	r0x1006
;;signed compare: left < lit(0x0=0), size=2, mask=ffff
_00130_DS_:
	BSF	STATUS,0
	BTFSS	r0x1006,7
	BCF	STATUS,0
	BTFSC	STATUS,0
	GOTO	_00127_DS_
;;genSkipc:3257: created from rifx:0x7ffc5f11ef70
;	.line	34; "main.c"	PORTCbits.RC0 = (uint8_t)i & 1;
	MOVF	r0x1005,W
	MOVWF	r0x1007
	RRF	r0x1007,W
	BTFSC	STATUS,0
	GOTO	_00001_DS_
	BANKSEL	_PORTCbits
	BCF	_PORTCbits,0
_00001_DS_:
	BTFSS	STATUS,0
	GOTO	_00002_DS_
	BANKSEL	_PORTCbits
	BSF	_PORTCbits,0
_00002_DS_:
;	.line	32; "main.c"	for (int16_t i = 255; i >= 0; i -= 8)
	MOVLW	0xf8
	ADDWF	r0x1005,F
	BTFSS	STATUS,0
	DECF	r0x1006,F
	GOTO	_00130_DS_
_00127_DS_:
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

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

ПС
Просто разница меня поразила - за полчаса на буржуйском форуме адекватно всё разобрали с пришли к выводу. А на нашем родном коте - началось с оскорблений....печаль

Добавлено after 1 minute 56 seconds:
[uquote="oleg110592",url="/forum/viewtopic.php?p=3658221#p3658221"]Компилятор SDCC (3.9 свежий) на конструкцию вообще не ругнулся[/uquote]

Естественно, да и не должен - как я и писал в стартовом посте то, что пишет xc8 - это бред не совместимый со стандартом СИ.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: xc8 и degenerate unsigned comparison

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

fsmoke писал(а):Вы не только не аргументировали свою фразу, но и не удосужились появиться, когда я ответил на Ваш выпад.
Если Вы не умеете читать документацию (или просто Вам лень это делать) - это Ваши проблемы. Я не намерен аргументировать очевидное.
И будь Вы хоть 100500-летним программистом, не зная, что существуют стандарты, Вы - плохой программист.

PS: А выпад (как Вы выразились), был именно с Вашей стороны. Таких выпадов тут на форуме - вагон и маленькая тележка. Когда каждый "программист" с месячным стажем, мнящий себя крутым спецом, первым делом забрасывает какашками компилятор, считая себя умнее его разработчиков. А проблема, как потом оказывается (как и в данном случае), элементарная - в прокладке между стулом и монитором.

PSPS: По поводу личностей. Вы меня оскорбили, назвав компилятор XC дичью. Надеюсь, этого аргумента достаточно.
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

[uquote="Аlex",url="/forum/viewtopic.php?p=3658251#p3658251"]не зная, что существуют стандарты, Вы - плохой программист.[/uquote]

Дык вот из-за того, что я их знаю - я и создал этот топик. А Ваши знания видимо оставляют желать лучшего.

ПС
А Вы вообще читали остальной тред и тред на микрочипе - или как обычно выпалили не подумав. Мы тут как раз стандарт и обсуждаем :lol:

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

ПС2
Да и кстати - если Вы такой хороший программист - растолкуйте нам убогим - в чём же мы не правы?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: xc8 и degenerate unsigned comparison

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

Не нужно меня троллить. Если Вам скучно и не с кем поговорить, Вы выбрали неправильное направление - я не собеседник для досуга.
PS: Повторяться не буду. Всего хорошего !
fsmoke
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб июл 10, 2010 19:33:15

Re: xc8 и degenerate unsigned comparison

Сообщение fsmoke »

[uquote="Аlex",url="/forum/viewtopic.php?p=3658271#p3658271"]Не нужно меня троллить.[/uquote]
Я не собирался никого троллить, просто это уже абсурдная ситуация - Вы можете объяснить наличие этого варнинга? Я хочу ответа по теме - больше мне ничего не нужно.
Ответить

Вернуться в «PIC»