for (uint8_t i(0); (int)i <= 255; ++i)
Кажется мне совершенно ясным.
Даже если вы пытаетесь использовать 1-байтовый счетчик, ваш компилятор вполне может превратить его в следующее:
for (int ii(0); ii <= 255; ++ii) {
uint8_t i(ii);
...
}
Например, GCC делает, потому что это быстрее.
$ cat >test.c
void foo(char);
void bar(void) {
char i;
for (i = 0; i <= 255; i++)
foo(i);
}
^D
$ cc -m32 -c -O3 test.c
$ objdump -d test.o
test.o: file format elf32-i386
Disassembly of section .text:
00000000 <bar>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 53 push %ebx
4: 31 db xor %ebx,%ebx
6: 83 ec 04 sub $0x4,%esp
9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
10: 89 1c 24 mov %ebx,(%esp)
13: 83 c3 01 add $0x1,%ebx
16: e8 fc ff ff ff call 17 <bar+0x17>
1b: eb f3 jmp 10 <bar+0x10>
$ cc -m64 -c -O3 test.c
$ objdump -d test.o
test.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <bar>:
0: 53 push %rbx
1: 31 db xor %ebx,%ebx
3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
8: 89 df mov %ebx,%edi
a: 83 c3 01 add $0x1,%ebx
d: e8 00 00 00 00 callq 12 <bar+0x12>
12: eb f4 jmp 8 <bar+0x8>