История изменений
Исправление Xenius, (текущая версия) :
вот смотри, такой код
Не компилируется.
In function `_start': ... csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
collect2: ld returned 1 exit status
Почему у тебя _tmain вместо main и какой-то _TCHAR вместо char?
ta-filetest.cpp:1:20: fatal error: stdafx.h: No such file or directory
compilation terminated.
После исправления — опять какой-то нестандарт.
После убирания заголовка:
ta-filetest.cpp: In function ‘int main(int, char**)’:
ta-filetest.cpp:7:16: warning: deprecated conversion from string constant to ‘char*’
Но всё-таки работает.
Результат: созданы файлы, причем оба - в юникодной кодировке. При русской локали совместимость - полная
Совместимость с GNU/Linux не полная, так как добавлена несовместимая фигня, которую пришлось убирать. Без неё бы не работало? Почему?
Вот ты говоришь о совместимости со старыми программами — значит надо было так делать, чтоб старые программы, написанные для UNIX компилировались без изменений в коде и работали даже с нативными символами, если они не применяют манипуляций со строками.
Можно. Осталось только научить ею пользоваться кучу legacy-софта, давно не поддерживаемого и проприетарного, но необходимого некоторым
Зачем? Есть же «режим совместимости». Если он включен — выбирается таблица ANSI в тех же настройках, причём возможно разная для разных приложений. Если выключен — по умолчанию выбирается CP_UTF8 и приложения, работающие с юникодом в линуксе компилируются и работают без изменений.
Если пишется новая версия приложения — переписать придётся только строковые операции, а всё остальное остаётся без изменений.
Выбранный же мелкомягкими метод с UTF16 требует не только изменить строковые операции, но ещё заменить все вызовы API, чтоб перейти на него и несовместим с POSIX. То есть однозначно хуже чем CP_UTF8
Исправление Xenius, :
вот смотри, такой код
Не компилируется.
In function `_start': ... csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
collect2: ld returned 1 exit status
Почему у тебя _tmain вместо main и какой-то _TCHAR вместо char?
ta-filetest.cpp:1:20: fatal error: stdafx.h: No such file or directory
compilation terminated.
После исправления — опять какой-то нестандарт.
После убирания заголовка:
ta-filetest.cpp: In function ‘int main(int, char**)’:
ta-filetest.cpp:7:16: warning: deprecated conversion from string constant to ‘char*’
Но всё-таки работает.
Результат: созданы файлы, причем оба - в юникодной кодировке. При русской локали совместимость - полная
Совместимость с GNU/Linux не полная, так как добавлена несовместимая фигня, которую пришлось убирать. Без неё бы не работало? Почему?
Вот ты говоришь о совместимости со старыми программами — значит надо было так делать, чтоб старые программы, написанные для UNIX компилировались без изменений в коде и работали даже с нативными символами, если они не применяют манипуляций со строками.
Можно. Осталось только научить ею пользоваться кучу legacy-софта, давно не поддерживаемого и проприетарного, но необходимого некоторым
Зачем? Есть же «режим совместимости». Если он включен — выбирается таблица ANSI в тех же настройках, причём возможно разная для разных приложений. Если выключен — по умолчанию выбирается CP_UTF8 и приложения, работающие с юникодом в линуксе компилируются и работают без изменений.
Если пишется новое приложение — переписать придётся только строковые операции, а всё остальное остаётся без изменений.
Выбранный же мелкомягкими метод с UTF16 требует не только изменить строковые операции, но ещё заменить все вызовы API, чтоб перейти на него и несовместим с POSIX. То есть однозначно хуже чем CP_UTF8
Исходная версия Xenius, :
вот смотри, такой код
Не компилируется.
In function `_start': ... csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
collect2: ld returned 1 exit status
Почему у тебя _tmain вместо main и какой-то _TCHAR вместо char?
ta-filetest.cpp:1:20: fatal error: stdafx.h: No such file or directory
compilation terminated.
После исправления — опять какой-то нестандарт.
После убирания заголовка:
ta-filetest.cpp: In function ‘int main(int, char**)’:
ta-filetest.cpp:7:16: warning: deprecated conversion from string constant to ‘char*’
Но всё-таки работает.
Результат: созданы файлы, причем оба - в юникодной кодировке. При русской локали совместимость - полная
Совместимость с GNU/Linux не полная, так как добавлена несовместимая фигня, которую пришлось убирать. Без неё бы не работало? Почему?
Вот ты говоришь о совместимости со старыми программами — значит надо было так делать, чтоб старые программы, написанные для UNIX компилировались без изменений в коде и работали даже с нативными символами, если они не применяют манипуляций со строками.
Можно. Осталось только научить ею пользоваться кучу legacy-софта, давно не поддерживаемого и проприетарного, но необходимого некоторым
Зачем? Есть же «режим совместимости». Если он включен — выбирается таблица ANSI в тех же настройках, причём возможно разная для разных приложений. Если выключен — по умолчанию выбирается CP_UTF8 и приложения, работающие с юникодом в линуксе компилируются и работают без изменений.
Если пишется новое приложение — переписать придётся только строковые операции, а всё остальное остаётся без изменений.
Выбранный же мелкомягкими метод с UTF16 требует не только изменить строковые операции, но ещё заменить все вызовы API, чтоб перейти на него и несовместим с POSIX. То есть однозначно хуже чем CP_UTF8