Вот код -Неправильное преобразование из неподписанные символ * на символ *
1 int main(int argc, char *argv[])
2 {
3 signed char S, *psc;
4 unsigned char U, *pusc;
5 char C, *pc;
6
7 C = S;
8 C = U;
9
10 pc = psc;
11 pc = pusc;
12
13 return 0;
14 }
$ gcc test.cpp -o a
test.cpp: In function ‘int main(int, char**)’:
test.cpp:10:7: error: invalid conversion from ‘signed char*’ to ‘char*’ [-fpermissive]
test.cpp:11:7: error: invalid conversion from ‘unsigned char*’ to ‘char*’ [-fpermissive]
Это составлен на GCC версии 4.6.3 на Ubuntu 12.10 на 32-битной машине Intel.
Учитывая, что char
тип is unsigned char
x86. -
Если присвоения в строках 7 и 8 для типов, отличных от указателей, являются «ОК», почему ошибки выбрасываются для типов указателей в строках 10 и 11?
Кроме того, должен ли C = U
успешно работать без требования?
Вы знакомы с термином ["strict aliasing"] (http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html)? – WhozCraig
Чтение этого материала ... – nightlytrails
'-fpermissive' может вам помочь и игнорировать эту досаду. Просто время от времени вам может понадобиться временно удалить тег снова и посмотреть, не обнаружит ли ваш компилятор другие ошибки, чем этот в вашем проекте, о котором вы должны * беспокоиться. – rsethc