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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

"обрезанный по маске" это отдельные биты проверить чтобы?
Тогда
if ( c != (PINC & 0b00000001) )
Переменная c будет сравниваться с числом полученным от наложения побитового И на значение прочитанное из порта PINC.
Последний раз редактировалось Kavka Пт июн 14, 2013 09:43:30, всего редактировалось 1 раз.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

if (c != (PINC&0x01))
Ставим плюсы: )
Реклама
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Я был близок к истине, спасибо :)
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Парни, а теперь вот что за вопрос (гугл не очень помог): как правильно сделать вынесеный файл имя.h и к нему обратиться.
Условно у меня есть строка, которая делает PORTB=(a+c);
Я хочу вынести эту строку в отдельный файл и прикрепить её через #include имя-файла. А потом в порграмме ставить какое-то слово, которое будет при компиляции заменяться на PORTB=(a+c);. Как это пишется? Я пробовал в АСтудии 6 создавать файл.h, но что-то я не так с функциями там пишу видимо Оо
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Реклама
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Да это не на сайт ПИКа нужно отправлять, а к Кернигану и Ричи. Неужели нельзя почитать базовую литературу, чтобы не засорять форум такими вопросами? А про гугл ты нагло врешь, все там есть.
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

зачем переменная? не совсем понятно зачем она нужна.
Можно вообще не использовать сравнение в условиях
например так
if(!PINC&0b00000001){
//тут все что нужно;}

Ой :facepalm: уже ответили :)))
АндрейАвербах
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

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

Сообщение АндрейАвербах »

Всем доброго времени суток. С моим вопросом мне посоветовали идти сюда.
Только начал изучать WinAPI в С++ написал такой код.

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

#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    MessageBox(0, "Info", "Text", MB_OK);
    return 0;
}

Компилирую в Dev-C++, компилируется нормально, запускаю, вылазит мое окошко и какое-то черное окошко. Как убрать черное окошко?
Tolmi
Говорящий с текстолитом
Сообщения: 1658
Зарегистрирован: Вс дек 11, 2011 05:25:04
Откуда: Киев, Украина
Контактная информация:

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

Сообщение Tolmi »

Черное окошко - я так понимаю консоль.
Надо создать правильный проект, для GUI приложения.
In theory, theory and practice are the same. In practice, they're not.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

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

Как убрать черное окошко?
чтобы не было подобных вопросов, начните с основ - Петцольд Ч. Программирование для Windows 95
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

как сделать циклический сдвиг ?
Tell Me The Truth
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Создать цикл и в нём сдвигать.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

может я неверно выразился или недопонимаю что-то, но под циклическим сдвигом я понимаю сдвиг, допустим в право, при котором ушедшие разряды не пропадают а появляются с лева
Tell Me The Truth
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

ну да. можно и так понимать циклический сдвиг. но от этого не меняется сам принцип, сделать цикл и сдвигать)))
Ставим плюсы: )
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

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

unsigned int i=0;

i=((i&1)<<15)|(i>>1);           // вправо
i=((i&(1L<<15))>>15)|(i<<1);    // влево
Код будет меньше, если написать его в несколько строк - сохранение бита, сдвига переменной и вставка сохранённого бита с другой стороны переменной.
АндрейАвербах
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

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

Сообщение АндрейАвербах »

Написал такую штуку в учебных целях

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

#include <windows.h>
#include <windowsx.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void OnDestroy(HWND);
void OnPaint(HWND);
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    char szClassName[] = "MainWindow";
    char szTitle[] = "My second window!";
    MSG Msg;
    WNDCLASS wc;
    ZeroMemory(&wc, sizeof(wc));
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInst;
    wc.hIcon = LoadIcon(0, IDI_APPLICATION);
    wc.hCursor = LoadCursor(0, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) 0;
    wc.lpszClassName = szClassName;
    RegisterClass(&wc);
    HWND hwnd = CreateWindow(szClassName, szTitle, WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, HWND_DESKTOP, 0, hInst, 0);
    ShowWindow(hwnd, SW_SHOWNORMAL);
    while (GetMessage(&Msg, NULL, 0, 0))//Íå ñòàâèòü òî÷êó ñ çàïÿòîé òóò!!!
    {
          DispatchMessage(&Msg);
    }
    return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        switch(message)
        {
                   
                   HANDLE_MSG(hwnd, WM_PAINT, OnPaint);   
                   HANDLE_MSG(hwnd, WM_DESTROY, OnDestroy);//Âìåñòî case
                   default:
                           return(DefWindowProc(hwnd, message, wParam, lParam));
         }
         return 0;
}     
void OnDestroy(HWND)
{
     PostQuitMessage(0);
}
void OnPaint(HWND hwnd)
{
     char szText[] = "Òåêñò äëÿ ãëàâíîãî îêíà";
     PAINTSTRUCT ps;
     HDC hdc = BeginPaint(hwnd, &ps);
     TextOut(hdc, 0, 0, szText, strlen(szText));
     EndPaint(hwnd, &ps);
}

Компилирую, компилятор пишет [Linker error] undefined reference to `TextOutA@20' ld returned 1 exit status , что делать - не пойму.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

АндрейАвербах писал(а):... что делать - не пойму.
сделать, что просит линкер - подключить Gdi32.lib

PS. на подобные вопросы ответ есть здесь
АндрейАвербах
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

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

Сообщение АндрейАвербах »

После инклудов написал такую строку

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

#pragma comment(lib,"gdi32")

Не помогает :(
АндрейАвербах
Потрогал лапой паяльник
Сообщения: 345
Зарегистрирован: Пт авг 24, 2012 09:45:40
Откуда: Абакан, Хакасия

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

Сообщение АндрейАвербах »

Создал всю эту штуку как проект и о чудо! все заработало даже без подключения библиотеки!
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

vitalik_1984 писал(а):
if(!PINC&0b00000001){
//тут все что нужно;}


Это будет значить проверку нулевого бита порта С, и выражение будет считаться истиной, если результат логического И будет нулём?
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Ответить

Вернуться в «Разные вопросы по МК»