Страница 228 из 386

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн окт 19, 2015 13:58:46
Siarzhuk
kalobyte писал(а):я загуглил и там пишут, что надо в разделе с++ выбрать ключ /MT
Для VS 2008 статическая версия рантайма выбирается так: свойства проекта -> Configuration Properties->C/C++->Code Generation->Runtime Library->Multi-threaded /MT
kalobyte писал(а): LANG_RUSSIAN Russia (RU) 0x01 SUBLANG_RUSSIAN_RUSSIA
1049 это 0х0419
где взять магическое число для казахской раскладки?
в хидере WinNT.h Platform SDK:

Код: Выделить всё

#define LANG_KANNADA                     0x4b
#define LANG_KASHMIRI                    0x60
#define LANG_KAZAK                       0x3f
[...]
#define LANG_RUSSIAN                     0x19
[...]
#define SUBLANG_KAZAK_KAZAKHSTAN                    0x01    // Kazakh (Kazakhstan) 0x043f kk-KZ

Код: Выделить всё

GetKeyboardLayout function.   [...] The low word contains a Language Identifier for the input language [...] A language identifier is constructed using the MAKELANGID macro. The following illustration shows the format of the bits in a language identifier.


+-------------------------+-------------------------+
|     SubLanguage ID      |   Primary Language ID   |
+-------------------------+-------------------------+
15                    10  9                         0   bit

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 20, 2015 05:21:43
pokk
Добрый день, что-то поднадоело мне в iar предупреждение:

Код: Выделить всё

Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once)  .........
Я так понимаю iar ругается из за невидимого символа что типа не так на следующую строку перехожу, только вот какая ему разница ?

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 20, 2015 07:02:00
Chip115
WiseLord писал(а):Обнуляет ячейку в памяти по этому адресу.
Можно ли написать так (исходная запись *((volatile unsigned char *) (0x77200480)) = 0x00;)

Код: Выделить всё

 volatile unsigned char * 0x77200480 = 0x00;
Зачем нужна первая звездочка?

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 20, 2015 07:06:00
GARMIN
Первая звёздочка показывает, что по этому адресу лежит указатель на ячейку памяти, которую ты обнуляешь.

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 20, 2015 08:24:50
Siarzhuk
Chip115 писал(а):

Код: Выделить всё

 volatile unsigned char * 0x77200480 = 0x00;
Нельзя. Вы пытаетесь объявить указатель на unsigned char с именем 0x77200480 и инициализировать его в 0. Имена переменных, начинающиеся цифрами, запрещены - компилятор осмотрит вас с сочуствующим недоумением. ;)

0x77200480 - просто числовой литерал;
(unsigned char*)0x77200480 - приведение типа - результат этой операции - указатель, который уже можно в оном качестве скормить компилятору. Указывает на область памяти по соответствующему адресу;
*(unsigned char*)0x77200480 - разыменование указателя - получение доступа на чтение из (если справа) либо на запись в (если слева) область/области памяти на которую указывает указатель. Тип указателя определяет размер модифицируемой памяти - в данном случае 1 байт.

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 20, 2015 08:32:53
Siarzhuk
pokk писал(а):

Код: Выделить всё

Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once)  .........
Стандартный EOL для Windows - CR/LF, у вас-же, вероятно, исходные тексты содержат строчки, добавленые в Unix/Mac редакторах, либо полностью используют LF в качестве концов строк. Решение - открыть тексты в редакторе, менее дубовом чем Notepad и сохранить с родными для хост-системы концами строк. ЕМНИП Notepad++ такое может, сам пользуюсь более мне привычным vim-ом.

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 20, 2015 08:37:07
Chip115
Siarzhuk писал(а):
Chip115 писал(а):

Код: Выделить всё

 volatile unsigned char * 0x77200480 = 0x00;
Нельзя. Вы пытаетесь объявить указатель на unsigned char с именем 0x77200480 и инициализировать его в 0. Имена переменных, начинающиеся цифрами, запрещены - компилятор осмотрит вас с сочуствующим недоумением. ;)

0x77200480 - просто числовой литерал;
(unsigned char*)0x77200480 - приведение типа - результат этой операции - указатель, который уже можно в оном качестве скормить компилятору. Указывает на область памяти по соответствующему адресу;
*(unsigned char*)0x77200480 - разыменование указателя - получение доступа на чтение из (если справа) либо на запись в (если слева) область/области памяти на которую указывает указатель. Тип указателя определяет размер модифицируемой памяти - в данном случае 1 байт.
Спасибо что разжевали! Еще путаюсь с этими указателями )

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср окт 21, 2015 03:24:29
kalobyte
Siarzhuk писал(а):// Kazakh (Kazakhstan) 0x043f kk-KZ
что-то я не понял, откуда 04?
#define SUBLANG_KAZAK_KAZAKHSTAN 0x01
Siarzhuk писал(а):Для VS 2008 статическая версия рантайма выбирается так
я там и выбрал, но все равно просит новую длл

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср окт 21, 2015 08:36:30
Siarzhuk
kalobyte писал(а):// Kazakh (Kazakhstan) 0x043f kk-KZ
что-то я не понял, откуда 04?
#define SUBLANG_KAZAK_KAZAKHSTAN 0x01
Aufmerksamkeit über Alles. Гляньте на формат этого ид ещё раз. ;)
0x01 << 10

Re: Вопросы по С/С++ (СИ)

Добавлено: Сб окт 24, 2015 17:54:24
kalobyte
и что? :dont_know:
эти цифры мне ни о чем не говорят
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx
вот тут этот макрос
а как руками без него сделать? зачем писать лишний код

Re: Вопросы по С/С++ (СИ)

Добавлено: Сб окт 24, 2015 21:03:02
Siarzhuk
kalobyte писал(а):а как руками без него сделать?
искомое число как бы уже пролетало:

Код: Выделить всё

// Kazakh (Kazakhstan) 0x043f kk-KZ
kalobyte писал(а):зачем писать лишний код
Оригинальный спицылист уже сократил "лишний" код - уж скоро как неделю его хамонокод разгребаете. ;) Хотя он скорее всего тупо в отладчике коды подсмотрел.

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн окт 26, 2015 10:07:14
kalobyte
Siarzhuk писал(а):Оригинальный спицылист уже сократил "лишний" код
теперь понятно :evil:
я думал он те коды из таблицы просто взял икаким-то макаром слепил
ну раз макрос делает, то поковыряю его

а как отвязать от новых длл 2013 студии? те ключи не сработали

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн окт 26, 2015 11:16:32
Siarzhuk
kalobyte писал(а):а как отвязать от новых длл 2013 студии? те ключи не сработали
Я максимум смог в 2010 проверить - сначала собрал статическую версию в 2008 затем сконвертировал в 2010 - при просмотре в depends.exe зависимостей на msvcrtxxx.dll нету. Попробуйте открыть мой проект (http://siarzhuk.spdns.org/ruslat-2010.zip) в 2013 студии - может поможет разобраться.

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн окт 26, 2015 12:29:25
kalobyte
посмотрел,, сконвертил проект в 2013
собрал
зависимостей нет, есть только базовый msvcrt
свой проект пересобрал - зависимостей нет:?
хер знает чего ему надо было
поставил мт и зависимость пропала, а в тот раз так же ставил и была :facepalm:
осталось с макросом разобраться

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 27, 2015 12:11:06
Alpout
Не могу понять, почему не компилируется некоторые строки кода, например сложения умножения? Хотя параметры заданы как

Код: Выделить всё

9:                 static unsigned char Height,x,y;

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 27, 2015 12:22:54
ARV
да что тут понимать... лишние они, точнее - не дающие какого-либо результата, вот и не компилируются.

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 27, 2015 12:38:08
Alpout
ARV писал(а):да что тут понимать... лишние они, точнее - не дающие какого-либо результата, вот и не компилируются.
я прообовал их выводить в portc, но ничо не изменилось

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 27, 2015 12:40:00
ARV
я и говорю, результат этих операций нулевой, вот они и не компилируются. вы подумайте сами...

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 27, 2015 13:18:31
Alpout
ARV писал(а):я и говорю, результат этих операций нулевой, вот они и не компилируются. вы подумайте сами...
ну примерно понял, что Вы имеете ввиду. Переменная у присвоил значение TMR0, потому что x ниче не представляет, то есть х=0?

Re: Вопросы по С/С++ (СИ)

Добавлено: Вт окт 27, 2015 13:25:25
ARV
ну типа того
после того, как вы 256 используете множителем в выражении, где все операнды - однобайтные числа, нелепо ожидать, что в младшем байте результата будет что-либо, кроме 0.