crossplatform.ru

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

> Косяк или фича VC, странная переменная
AD
  опции профиля:
сообщение 8.5.2008, 18:05
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Случайно сделал следующую переменную:
std::vector<ParamDescr*>* recordы;


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

Пояснение:
recordы - студия такое разрешила!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 6)
Litkevich Yuriy
  опции профиля:
сообщение 8.5.2008, 18:14
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а от языка ничего не зависит, как я понимаю. есть символ с определенным кодом и все. Иначе файлы в UTF-8 бы не компилилось никогда.
я думаю ругнется если имя переменной начнется не на английскую букву.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 8.5.2008, 21:24
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Неа, просто в 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: " СЛЫШЬ __чё__;
    КОНЧЕЛ

    СТОЙ
    МЕДВЕД
А что будет в результате сами смотрите. :)

Сообщение отредактировал ViGOur - 8.5.2008, 21:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 8.5.2008, 22:53
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Вот результат: :)
[attachment=92:Result.JPG]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 8.5.2008, 23:00
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Ну вот видишь! :)

Можно обрамить все дефайнами и писать по русски, и компилятор даже не ругнется.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.5.2008, 23:52
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а гнутый не ест русские буквы, я один раз "с" русскую написал, долго не мог понять чё он до переменной сodder докопался :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 10.5.2008, 14:15
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Вообще то формально, поддержка национальных идентификаторов была заявлена ещё в стандарте С++ 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 это должны доработать - тогда, при указани локали исходника можно будет использовать русские имена напрямую.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 17:40