LINUX.ORG.RU

есть - сделай вдоль

anonymous ()

Нет, переходи на swift, если нужно такое

anonymous ()

Сисярпик и 1С ждет тебя

anonymous ()

Используй нормальный компилятор:

$ cat test.cpp
#include <iostream>

int main(int argc, char** argv)
{
        int Ё = 10;
        std::cout << Ё << std::endl;
        return 0;
}
$ g++ test.cpp -o test
test.cpp:5:2: error: stray '\320' in program
  int Ё = 10;
  ^
test.cpp:5:2: error: stray '\201' in program
test.cpp:6:2: error: stray '\320' in program
  std::cout << Ё << std::endl;
  ^
test.cpp:6:2: error: stray '\201' in program
test.cpp: In function 'int main(int, char**)':
test.cpp:5:9: error: expected unqualified-id before '=' token
  int Ё = 10;
         ^
test.cpp:6:18: error: expected primary-expression before '<<' token
  std::cout << Ё << std::endl;
                  ^
$ clang++ test.cpp -o test
$ ./test
10

anonymous ()

Три десятка макросов решат твою проблему жи

melkor217 ★★★★★ ()

clang спасёт тебя

MacBook-Andrew% cat test.c
#include <stdio.h>
int main(void)
{
int пони=1;
printf("%d\n", пони);
return 0;
}
MacBook-Andrew% clang test.c ; ./a.out
1

fornlr ★★★★★ ()

Только недавно точь-в-точь об этом было! Можно пропатчить gcc или использовать шланг. Но русские переменные и имена функций не нужны. Это — извращение.

Русским буквам вообще место только в комментариях для gettext'а, чтобы автоматизировать процесс формирования po-файлов.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от fornlr

а с арабской вязью например проканает? =)

anonymous ()
Ответ на: комментарий от fornlr

??? неужели в clang это работает? А если либу сделать, то другие смогут слинковаться?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от anonymous
$ cat test.cpp
#include <iostream>

int main(int argc, char** argv)
{
        int ಠ_ಠ = 10;
        std::cout << ಠ_ಠ << std::endl;
        return 0;
}

$ clang++ test.cpp -o test
$ ./test
10
anonymous ()
Ответ на: комментарий от anonymous

Прикольно. А что-нить спарава-налево? =))

anonymous ()
Ответ на: комментарий от EXL

Ну с #define неинтересно и читерство, ручной препроцессор же

так и в gcc будет работать

fornlr ★★★★★ ()
Последнее исправление: fornlr (всего исправлений: 3)
Ответ на: комментарий от fornlr
#include <stdio.h>

#define пусто   void
#define знак    char
#define число   int
#define вернуть return
#define начало  main

пусто
печать(знак *переменная)
{
        puts(переменная);
}

число
начало()
{
        знак *строка = "что-то там";
        печать(строка);
        вернуть 0;
}
$ make lor13 && ./lor13 
cc -O2 -pipe    lor13.c  -o lor13
что-то там
$ clang -v
FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512
# ...

Ну и: http://play.golang.org/p/zZkvC-vhCW ← тоже работает (и без извращений) ;)

beastie ★★★★★ ()
MacBook-Andrew% clang test.c
test.c:5:16: error: use of undeclared identifier 'лощадь'; did you mean
      'лошадь'?
printf("%d\n", лощадь);
               ^~~~~~
               лошадь
test.c:3:25: note: 'лошадь' declared here
void функция(int лошадь)
                 ^
1 error generated.

Вообще круто, исправил по подсказке компилятора - заработало.

#include <stdio.h>

void функция(int лошадь)
{
printf("%d\n", лошадь);
}

int main(void)
{
int пони=1;
функция(пони);
return 0;
}

fornlr ★★★★★ ()
Последнее исправление: fornlr (всего исправлений: 2)
Ответ на: комментарий от beastie

Я не представляю как это выглядит в ELF-файле, как с этим линковаться?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Так и выгядит:

$ nm lor13
# ... skipped
0000000000400730 T печать

А вот, как линковаться — не знаю.

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Ого, а в какой кодировке имена функций в ELF-е? Меня не на шутку это всё как-то резко заинтересовало. Блин, буду реально же проги писать с именами переменных на кириллице!

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft
00001cb0  40 40 46 42 53 44 5f 31  2e 30 00 d0 bf d0 b5 d1  |@@FBSD_1.0......|
00001cc0  87 d0 b0 d1 82 d1 8c 00  5f 5f 64 73 6f 5f 68 61  |........__dso_ha|

Похоже, что UTF-8.

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)

чтобы можно было использовать имена переменных и функций на русском языке

Сделать можно, но не нужно, ибо противоречит стандарту.

no-such-file ★★★★★ ()
Ответ на: комментарий от beastie

Похоже, что UTF-8

Очевидно, что будет кодировка текущей локали у автора программы - это не фича, это баг, что шланг криво проверяет идентификаторы на допустимость.

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от fornlr

Вообще круто

Присобачь еще инклуд

#define небытие void
#define целое int
#define вернуть return
#define печатать printf
#define программа main

и перепиши всё по-русски.

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

Очевидно, что будет кодировка текущей локали у автора программы - это не фича, это баг, что шланг криво проверяет идентификаторы на допустимость.

Требуется Eddy с KOIR-8 и шлангом на проверку сего утверждения. Получается, с помощью clang'а можно сделать бНОПНЯ?

EXL ★★★★★ ()
Ответ на: комментарий от no-such-file

это неинтересно, ибо с define уже не натурально и синтетично

fornlr ★★★★★ ()
Последнее исправление: fornlr (всего исправлений: 1)
Ответ на: комментарий от fornlr

ибо уже не натурально и синтетично

Дык я ж говорю, сделай это отдельный инклуд, а в программе используй #include<russian.h> Вполне ничотак.

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

Да, да, а ещё можно до одной строчки сократить файл - это уже непрактичное и некрасивое баловство с препроцессором

#include<russian.h>
скучный_код

fornlr ★★★★★ ()
Последнее исправление: fornlr (всего исправлений: 1)
Ответ на: комментарий от Hertz

Ещё можешь опустить 'define SEMKI', т.к. переменные в utf тоже прекрасно работают. ;)

beastie ★★★★★ ()

Unicode, you are doing it wrong.


#include <u.h>
#include <libc.h>
 
typedef int ☺☹☻;
typedef void ☹☺☻;
 
enum
{
	☹☻☺ = sizeof(☺☹☻),
	☻☺☹ = sizeof(☹☺☻)
};
 
☹☺☻
main(☹☺☻)
{
	☺☹☻ ☺☻☹;
 
	for (☺☻☹ = ☻☺☹; ☺☻☹ < ☹☻☺; ☺☻☹++)
		print("☺☻☹ = %d\n", ☺☻☹);
	exits(☻☺☹);
}

(c) Ken Thompson

loz ★★★★★ ()
Последнее исправление: loz (всего исправлений: 1)

Имена переменных и функций на русском языке.

Убивать!

Unicode4all ★★★★ ()
Ответ на: комментарий от no-such-file

UTF-8 значит UTF-8, всё, я решил - так и буду софт писать, где там шланг для бубунты качать? =)))

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от fornlr

Ты заметил, что ты единственный, кто включил приглашение командной строки в копипасту?

ya-betmen ★★★★★ ()
Ответ на: комментарий от beastie

Юникода НЕ-БУ-ДЕТ!

$ gcc -c test.c -fextended-identifiers -std=c99
$ nm test.o
0000000000000000 T ТВЕРДО_И_ЧЕТКО
anonymous ()
Ответ на: комментарий от beastie

gcc может это! The C Preprocessor: 1.1 Character sets

In identifiers, characters outside the ASCII range can only be specified with the ‘\u’ and ‘\U’ escapes, not used directly. If strict ISO C90 conformance is specified with an option such as -std=c90, or -fno-extended-identifiers is used, then those escapes are not permitted in identifiers.

$ cat lor13.c |./esc.tcl |gcc -x c - -std=c99 -fextended-identifiers
$ ./a.out
что-то там
$ nm ./a.out
....
0804840c T печать
$ cat esc.tcl
#!/usr/bin/tclsh
while {![eof stdin]} {
    set c [read stdin 1]
    if {![string is ascii $c]} {
        scan $c "%c" c
        set c [format "\\u%04X" $c]
    }
    puts -nonewline $c
}

Либо текстовый редактор научить это \u0434\u0435\u043B\u0430\u0442\u044. Такое vim сумеет?

I-Love-Microsoft, возвращайся назад на gcc!

fopen ★★ ()
Ответ на: комментарий от fopen
ISO/IEC 9899:1999 (E)
©ISO/IEC
Annex D
(normative)
Universal character names for identifiers
1 This clause lists the hexadecimal code values that are valid in universal character names
 in identifiers.
2 This table is reproduced unchanged from ISO/IEC TR 10176:1998, produced by ISO/IEC
 JTC 1/SC 22/WG 20, except for the omission of ranges that are part of the basic character
sets.
....
Cyrillic: 0401−040C, 040E−044F, 0451−045C, 045E−0481, 0490−04C4,
                   04C7−04C8, 04CB−04CC, 04D0−04EB, 04EE−04F5, 04F8−04F9
....

Это можно! И по стандарту!

fopen ★★ ()

тебя не смущает что при использовании кириллицы ты будешь вынужден постоянно переключать раскладку? Ты конечно можешь заменить макросами int на ЦЕЛОЕ, но команды препроцессору не изменишь. Это же дико неудобно.

Aswed ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Что ж ты здесь-то пишешь ненавмстными тебе русскими буквами? Peshi kak balyi tschelovek, amerekanskimi.

anonymous ()
Ответ на: комментарий от anonymous

Ты тупой? Я про код говорю, а не про тексты.

В коде вообще нужно избегать символов, выходящих за пределы первой половины ASCII, т.к. скорее всего, у 99.99% людей, которые откроют твой исходник, эти символы будут как хрентечто отображаться.

Вот, скажем, на кой мне китайские комментарии? Аналогично китайцу русские комментарии нафиг не нужны.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Aswed

Это только так кажется что это сложно и неудобно, привычка просто.

I-Love-Microsoft ★★★★★ ()

а чтобы можно было использовать имена переменных и функций на русском языке.

но зачем?

Dudraug ★★★★★ ()
Ответ на: комментарий от loz

Хорошо, что в Plan 9 компактный код. А то что делать, если в области видимости окажется больше 64 имён?

anonymous ()
Ответ на: комментарий от Unicode4all

Убивать!

Unicode4all

unicode на аватарке

Ты или аватарку с ником поменяй, или уж за юникод будь.

loz ★★★★★ ()
Ответ на: комментарий от loz

А юникод тут и не причем. Я даже рад, что шланг нормально его поддерживает. Но зачем? Разве 1С мало?

Unicode4all ★★★★ ()
Ответ на: комментарий от Aswed

Да, переключать раскладку дико неудобно. Но у всякой палки - два конца. Кстати, мне тут одна женщина сказала, что ей неудобно. Пришлось уволить.

fopen ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.