+32
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
#include <iostream>
void f(char c) { std::cout << "f(char)" << std::endl; }
void f(signed char c) { std::cout << "f(signed char)" << std::endl; }
void f(unsigned char c) { std::cout << "f(unsigned char)" << std::endl; }
int main()
{
f('a');
f((signed char)('a'));
f((unsigned char)('a'));
return 0;
}
илитный ресурс сегодня мне раскрыл глаза на очередное крестоблядство керниган-гай-ричи-блядство:
с:
The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char.
Irrespective of the choice made, char is a separate type from the other two and is not compatible with either.
с++:
Characters can be explicitly declared unsigned or signed. Plain char, signed char, and unsigned char are three distinct types.
Запостил: defecate-plusplus,
08 Октября 2012
LispGovno 08.10.2012 16:32 # +2
LispGovno 08.10.2012 16:33 # 0
defecate-plusplus 08.10.2012 16:34 # 0
всю жизнь хватало char vs unsigned char (которые могут представляться одинаково, но это никому не мешало)
не мешало в т.ч. потому, что http://ideone.com/5XpeG
LispGovno 08.10.2012 16:39 # +1
Elvenfighter 08.10.2012 19:05 # +1
3.14159265 08.10.2012 16:34 # +3
defecate-plusplus 08.10.2012 16:40 # +1
и это вместо того, чтобы запретить отрицательные символы, а всех кто считает иначе - предать анафеме
bormand 08.10.2012 17:20 # +5
suc-daniil 09.10.2012 14:18 # 0
bormand 10.10.2012 05:47 # −2
В с++ ситуация более сложная, т.к. есть перегрузка, и именно там эти типы сделали различными, чтобы можно было писать одну перегрузку с char а не по две перегрузки каждой функции с unsigned char и signed char, которые программисты вечно бы забывали.
LispGovno 10.10.2012 07:42 # 0
Xom94ok 08.10.2012 19:37 # +2
UPD: только после отправки понял, что написал x..ню.
bormand 08.10.2012 19:46 # +3
Где тут х..ня, Xom94ok?
Вроде как все верно - char для символов, где на знаковость почти наплевать, и она рулится опцией компилятора/дефолтами, а signed char и unsigned char для чисел, где важна знаковость. По мне так адекватное предположение.
Вот только какого х.я по дефолту символы знаковые? Русские буквы во всяких там однобайтовых кодировках так удобно было проверять на диапазоны из-за этих минусов...
absolut 08.10.2012 20:10 # 0
В разных системах может быть по-разному.
3.14159265 08.10.2012 19:48 # +3
Тоже не считаю это хуйней.
defecate-plusplus 09.10.2012 09:27 # +1
char, signed char и unsigned char - это все символы
они вводятся и выводятся как символы
bormand 09.10.2012 09:31 # +4
LispGovno 09.10.2012 10:20 # 0
TarasB 09.10.2012 10:27 # +3
Надо скачать свежую версию либастрала, с поддержкой зелёных ссылок.
defecate-plusplus 09.10.2012 10:30 # +2
absolut 09.10.2012 10:39 # +2
а компилятор С++
bormand 09.10.2012 13:49 # 0
absolut 09.10.2012 13:53 # 0
Steve_Brown 10.10.2012 09:52 # +3
absolut 10.10.2012 10:18 # +1
вообще, конечно, глазастый ;)
Dummy00001 09.10.2012 02:55 # 0
в С++ для совместимости это похоже так и унаследовали, но с расширением: char это то что девел свичами компилера регулирует и совместимо с С, unsigned char это всегда 0..255, signed char это всегда -128..127.
но к слову я как бы не уверен что это по стандарту так. в GCC это именно так. но в паре комерческих С++ компиляторов с которыми я работал, свичом реально меняется char на signed/unsigned char. что есть весьма бесполезно и почему на свиче в доке стоит большой варнинг: типа ломает сигнатуры, использовать только для С кода.
TarasB 09.10.2012 09:56 # +5
Вот ду ю сей браза ай донт андестэнд ю.
Dummy00001 09.10.2012 12:39 # 0
SunStudio:
IBM's xlC:
> > ... девел свичами компилера регулирует ...
... разработчик контролирует конфигурацией компилятора ...
TarasB 09.10.2012 13:11 # +3
Ты настолько наанглососонился, что даже не в состянии сказать по-русски не криво?
Разработчик выставляет флаги компилятора.
Dummy00001 09.10.2012 13:24 # +2
другими словами, то что ты видишь это перевод с немецко-англиского (с французским акцентом) на русский (с беларуским дзыканьем) :)
absolut 09.10.2012 13:54 # +3
eth0 11.10.2012 12:06 # +7
Триальная версия.
absolut 11.10.2012 13:27 # +2
LispGovno 08.10.2012 18:45 # +5
3.14159265 08.10.2012 18:54 # +6
LispGovno 08.10.2012 19:02 # 0
3.14159265 08.10.2012 19:05 # +1
то фоткай на телефон, с супом.
LispGovno 08.10.2012 19:06 # −1
3.14159265 08.10.2012 19:10 # +1
bormand 08.10.2012 19:41 # +1
3.14159265 08.10.2012 19:49 # 0
Но виртуальное ж есть: /dev/vcs
Или гумно настолько нищеброд, что не может позволить себе виртуальное устройство?
LispGovno 08.10.2012 21:33 # −4
3.14159265 09.10.2012 14:29 # +3
LispGovno 10.10.2012 10:05 # −2
3.14159265 10.10.2012 18:40 # 0
Все согласны?
На этом сайте есть только говно, его ты и получаешь в приз - употребляй сколько душе угодно.
TarasB 10.10.2012 20:34 # 0
3.14159265 11.10.2012 13:50 # 0
Так вот тут ситуация точь-в-точь - в списке публично осрамившихся поделил 2-3 места с HaskellGovno.
wvxvw 08.10.2012 20:43 # +2
LispGovno 08.10.2012 21:24 # −1
roman-kashitsyn 08.10.2012 22:58 # +1
wvxvw 08.10.2012 23:21 # 0
Так что ни ГИМП, ни ИмиджМаджик не помогут - им тоже неоткуда это взять. Они могут только если композиция делается процессором, т.е. софтовая эмуляция ОГЛ.
А фишка эта еще и потому, что новые "навороченные" десктопы типа третьего гнома + юнити и т.п. решили, что им просто необходимы шейдеры и все такое. И теперь они отрисовываются через dri - ну вот и получилось...
bormand 09.10.2012 08:07 # +2
P.S. На нвидии в юнити спокойно делаю скрины (к примеру скрин lynx в недавнем треде).
P.P.S. А ну хотя у меня DRI вроде и выключен, но включен GLX, домой приду - проверю.
wvxvw 09.10.2012 11:35 # +1
Я так себе представляю, что драйвер должен предоставлять такую возможность, как сделать скриншот :) очевидно он этого не делает / делает не правильно. А больше получить это не от куда.
wvxvw 08.10.2012 23:27 # 0
roman-kashitsyn 09.10.2012 00:21 # −1