crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Косяк или фича VC
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Tonal Дата 10.5.2008, 14:15
  Вообще то формально, поддержка национальных идентификаторов была заявлена ещё в стандарте С++ 98.
Вот только руки до неё не у кого не дошли...

Хотя времена меняются, и уже в мингве 4.2.1 можно делать такое:
#include <iostream>
using std::cout;
using std::endl;

int main() {
  //int Вася = 555;
  int \u0412\u0430\u0441\u044f = 555;
  //cout<<Вася<<endl;
  cout<<\u0412\u0430\u0441\u044f<<endl;
}

И компилировать так:
C:\test>g++-dw2 -fextended-identifiers -o "ttt" "ttt.cpp"

Т.е. можно использовать русские имена, если перед компиляцией преобразовывать их в уникодовские литералы.
Правда при этом будут довольно уродские сообщения об ошибках.

P.S. Вроде в 4.3.0 это должны доработать - тогда, при указани локали исходника можно будет использовать русские имена напрямую.
Litkevich Yuriy Дата 8.5.2008, 23:52
  а гнутый не ест русские буквы, я один раз "с" русскую написал, долго не мог понять чё он до переменной сodder докопался :)
ViGOur Дата 8.5.2008, 23:00
  Ну вот видишь! :)

Можно обрамить все дефайнами и писать по русски, и компилятор даже не ругнется.
AD Дата 8.5.2008, 22:53
  Вот результат: :)
[attachment=92:Result.JPG]
ViGOur Дата 8.5.2008, 21:24
  Неа, просто в 2005 студии добавлена поддержка русских символов и не только вроде бы.
Например такой код скомпилится и будет работать:
//
// Превед.cpp : Defines the entry point for the console application.
//

#include <iostream>
#include <locale.h>

//------------------------------------------------------------------
// The PREVED Language Kernel area. Do not touch! :)

#if !defined (_MSC_VER) || _MSC_VER < 1400
#error Wrong compiler! Use MSVS 8.0
#endif

#define НАЧЕЛ      {
#define КОНЧЕЛ;}
#define ТИПА       int
#define ВДРУГ      if (
#define ТАДА       )
#define НИХРИНА    else
#define ВЗАД       return
#define КАГДИЛА    (
#define ЙО;
#define ЖЖОШ(p,n)  for (; (p) <= (n); (p)++)

#define БАЗАР      std::cout <<
#define СЛЫШЬ      <<
#define СТОЙ       system ("echo. & pause");
#define БЛИН       _wsetlocale (LC_ALL, L"Russian_Russia.ACP");

#define ВРОДЕ      try
#define САФСЕМПЛАХОЙ   throw
#define АПСТЕНУ    catch (const char* __чё__)

#define ПРЕВЕД     ТИПА main КАГДИЛА ТАДА
#define МЕДВЕД     ВЗАД 0; КОНЧЕЛ

// End of area
//------------------------------------------------------------------

ТИПА КРУТО КАГДИЛА ТИПА фигня ТАДА
    НАЧЕЛ
    БАЗАР "ВАЩЕ " ЙО
    ВДРУГ фигня == 8 ТАДА САФСЕМПЛАХОЙ "Ааааа! " ЙО
    ВЗАД 0
    КОНЧЕЛ

ПРЕВЕД
    НАЧЕЛ
    БЛИН

    ВРОДЕ НАЧЕЛ

    ТИПА фишка = 0 ЙО

    ЖЖОШ (фишка, 10)
        НАЧЕЛ
        БАЗАР фишка СЛЫШЬ " ";
        ВДРУГ фишка >= 5 ТАДА КРУТО (фишка) ЙО
        КОНЧЕЛ

    КОНЧЕЛ АПСТЕНУ НАЧЕЛ
        БАЗАР "САФСЕМПЛАХОЙ invoked: " СЛЫШЬ __чё__;
    КОНЧЕЛ

    СТОЙ
    МЕДВЕД
А что будет в результате сами смотрите. :)
Litkevich Yuriy Дата 8.5.2008, 18:14
  а от языка ничего не зависит, как я понимаю. есть символ с определенным кодом и все. Иначе файлы в UTF-8 бы не компилилось никогда.
я думаю ругнется если имя переменной начнется не на английскую букву.
AD Дата 8.5.2008, 18:05
  Случайно сделал следующую переменную:
std::vector<ParamDescr*>* recordы;


И студия (VC2005) "съела", т.е. не выдала ошибки! Неужели в стандарте С++ прописано, что можно использовать язык, отличный от английского? :blink:

Пояснение:
recordы - студия такое разрешила!
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 8:17