LINUX.ORG.RU

История изменений

Исправление ASM, (текущая версия) :

Пожалуй с Вами соглашусь:

sh-4.2$ cat main.c 
#include <stdio.h>
#include <inttypes.h>

void a(void) {
  uint32_t a=10,b=11;
  int64_t c;
  c=(a-b);
  printf("C: %"PRIi64"\n",c);
}
void b(void) {
  uint8_t a=10,b=11;
  int16_t c;
  c=(a-b);
  printf("C: %"PRIi16"\n",c);
}

int main(void) { a(); b(); return 0; }

sh-4.2$ gcc-6.2.0 -m32 -Wall -Wextra -Wpedantic main.c && ./a.out
C: 4294967295
C: -1

Но потенциальной проблемы это не отменяет.

На заметку: использование PRIi64 конечно правильно, но код получается уж крайне ублюдочный. ИМХО.

Исходная версия ASM, :

Пожалуй с Вами соглашусь:

sh-4.2$ cat main.c 
#include <stdio.h>
#include <inttypes.h>

void a(void) {
  uint32_t a=10,b=11;
  int64_t c;
  c=(a-b);
  printf("C: %"PRIi64"\n",c);
}
void b(void) {
  uint8_t a=10,b=11;
  int16_t c;
  c=(a-b);
  printf("C: %"PRIi16"\n",c);
}

int main(void) { a(); b(); return 0; }

sh-4.2$ gcc-6.2.0 -m32 -Wall -Wextra -Wpedantic main.c && ./a.out
C: 4294967295
C: -1

Но потенциальной проблемы это не отменяет.