WinAVR

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hello, All!

Кто сможет объяснить почему такой разной код создается в С и С++?
Файл один и тот же, только меняю расширение, с main.с на main.срр.

#include <avr/io.h>

int main(void)
{
volatile uint8_t result;

uint8_t data=PINC;
if (data & 0x20) result=0x80;
for(;;);
}

Вот что компилится из main.c

  29                .LM2:
  30 0008 359B              sbis 38-0x20,5
  31 000a 02C0              rjmp .L2
  32                .LM3:
  33 000c 80E8              ldi r24,lo8(-128)
  34 000e 8983              std Y+1,r24
  35                .L2:
  36                .L3:
  37                .LM4:
  38 0010 FFCF              rjmp .L3

Вот что компилится из main.cpp

  31                .LM2:
  32 0008 86B1              in r24,38-0x20
  33                .LM3:
  34 000a 9927              clr r25
  35 000c 25E0              ldi r18,5
  36 000e 9695          1:  lsr r25
  37 0010 8795              ror r24
  38 0012 2A95              dec r18
  39 0014 E1F7              brne 1b
  40 0016 8170              andi r24,lo8(1)
  41 0018 9070              andi r25,hi8(1)
  42 001a 8823              tst r24
  43 001c 11F0              breq .L2
  44                .LM4:
  45 001e 80E8              ldi r24,lo8(-128)
  46 0020 8983              std Y+1,r24
  47                .L2:
  48                .L3:
  49                .LM5:
  50 0022 FFCF              rjmp .L3

Флаги компилятора в одном и другом случае совершенно одинаковы. Компилятор один
и тот же avr-gcc 3.4.5.

With best regards, Igor.        Time: 16:29        Date: 11 Июн 06

WinAVR
Привет Igor!

11 Jun 06 16:29, Igor Ulanov писал All:

 IU> Кто сможет объяснить почему такой разной код создается в С и С++?
 IU> Файл один и тот же, только меняю расширение, с main.с на main.срр.

 IU> Компилятор один и тот же avr-gcc 3.4.5.

    Обнови компилятор. gcc-4.1.0 для обоих языков генерит одинаковый код,
совпадающий с твоим первым. С какого бодуна 3.4.5 решил делать проверку бита
таким извращенным способом, :)  я объяснить не могу.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Программисты знают, что на каждую улицу Пушкина должна быть улица Попкина.

WinAVR
Hello, Alex!

(12 Июн 06 00:56), Alex Mogilnikov писАл Igor Ulanov:
 AM>     Обнови компилятор. gcc-4.1.0
 Я под виндой. Последняя сборка winavr - 20060421. Компилятор там 3.4.6, С++
компилит идентично. Как самому собирать, и возможно ли это, даже думать не
хочется.
Спасибо за ответ. Во-вторник на работе похожу по инету, может какой-нибудь
выход найдется.

With best regards, Igor.        Time: 01:21        Date: 12 Июн 06

Site Timeline