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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

принципиальным было предложение заменить длиннющий и не модифицируемый оператор ИЛИ на аналитическое выражение, которое определит длину формируемой строки, все прочие идеи уже носят характер оформительский.

но я хотел еще обратить внимание на то, что лучше всего уйти от "магических чисел", сделав код по-настоящему универсальным, что и попытался показать в своём примере.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

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

Сообщение просто КОТ »

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

for(int i=0;i<sizeof(table);i++) int r=!(i%32) ? fprintf(p_file,"0x%02X, ",table[i],"\n"):fprintf(p_file,"0x%02X, ",table[i]);
Можно попробовать в одну строчку, кстати... :write:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

просто КОТ писал(а):Можно попробовать в одну строчку
тогда уж так

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

for(int i=-1; ++i<sizeof(table); fprintf(p_file,"0x%02X,%с",table[i], i%NUM_COUNT ? ' ' : '\n'));
:)))

еще чуть-чуть, и будет, как у меня в подписи :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ARV писал(а):
FreshMan писал(а):как можна сократить данный код ?

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

#define NUM_COUNT   32

int i = 0;
while(i < sizeof(sin_table)){
   fprintf( p_file, "0x%02X, ", sin_table[i] );
   if(!(i % NUM_COUNT)) fprintf(p_file, "\n");
   i++;
}
при i=0 происходит перевод строки
Изображение
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

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

Сообщение просто КОТ »

Ну... тут проще нулевую выборку скормить в файл вручную. А потом вписать наш шедевр, начиная с первого:

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

for(int i=0; ++i<sizeof(table); fprintf(p_file,"0x%02X,%c", table[i], i%NUM_COUNT ? ' ' : '\n'));
Изображение
И ты врёшь!!! © Vladisman
Изображение
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

я бы не сильно гнался за краткостью - всё хорошо в меру.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

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

Сообщение просто КОТ »

У меня какой-то пунктик на этом. Перед защитой курсовой последние два дня только и делал, что сидел да код сокращал. В итоге на страничку А4 влез с запасом, хотя там была работа с графикой и клеточные автоматы. :beer:
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

меня тут упрекают за нравоучения... но что делать, если моё мнение как-то идет вразрез с мнением других, а высказаться хочется? уж простите...

я тут прочитал, что есть "спортивное программирование", есть конкурсы на самый "красивый" код (там форматируют текст в виде всяких картинок), на самый короткий, на самый странный (см. мою подпись)... но какое отношение всё это имеет к нормальной жизни?

да, как особый вид искусства - согласен, имеет право на существование. но при постоянном применении это уже смахивает на какое-то отклонение... я стараюсь не злоупотреблять этим.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

интересует мнение опытных писателей кода относительно #pragma once
давно интересовался вопросом повторного включения модуля в многомодульном проэкте
тоесть
в главном модуле main усть #include <avr/io.h>
но он также нужен и в lcd.h и в ds18b20.h
что можете посоветовать ?
Tell Me The Truth
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

- Не использовать #pragma once
- Просто включать <avr/io.h> в каждом файле
- В своих многократно включаемых хидерах (myfile.h) оборачивать их содержимое в "скобки" препроцессора

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

#ifndef MYFILE_H
#define MYFILE_H

// содержимое myfile.h

#enfid
https://ru.wikipedia.org/wiki/Include_guard
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

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

Сообщение Zhuk72 »

WiseLord писал(а): - В своих многократно включаемых хидерах (myfile.h) оборачивать их содержимое в "скобки" препроцессора

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

#ifndef MYFILE_H
#define MYFILE_H

// содержимое myfile.h

#enfid
Почему-то в Keil'е это не работает, так же, как и рекомендуемая там форма записи:

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

#ifndef FILENAME_INCLUDED
#define FILENAME_INCLUDED

/* Header File Contents */

#endif
Либо я (что более вероятно) делаю это не так, как нужно.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
A. Fig Lee
Потрогал лапой паяльник
Сообщения: 306
Зарегистрирован: Сб мар 17, 2012 20:31:44
Откуда: Нью Йорк

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

Сообщение A. Fig Lee »

Не может быть, чтоб не работало
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

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

Сообщение Zhuk72 »

Сам понимаю, что не правильно это, но тем не менее в Мплабе нормально, а Кайл ругается.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Zhuk72 писал(а):так же, как и рекомендуемая там форма записи
Собственно, обе записи ничем не отличаются.

Надеюсь, у Вас не во всех файлах именно "FILENAME_INCLUDED". У каждого хидера должно быть своё уникальное имя для макроса. Я обычно предпочитаю для файла типа FileName.h выбирать имя FILENAME_H.

И про keil - точно что-то не так делаете. Потому что та же STDPERIPH библиотека для STM32 точно с такими же макросами реализована.
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

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

Сообщение Siarzhuk »

Zhuk72 писал(а):
Должно быть #endif
Опечатка?
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

опечатка
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

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

Сообщение Zhuk72 »

WiseLord писал(а):Надеюсь, у Вас не во всех файлах именно "FILENAME_INCLUDED".
Разумеется. FILENAME заменяется, скажем, на INIT_H, MENU_H и т.д.
Каждый имеет право на свое личное ошибочное мнение.

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

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

Сообщение FreshMan »

WiseLord писал(а): - Просто включать <avr/io.h> в каждом файле
а на размере кода сие не сказывается ?
Tell Me The Truth
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

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

Сообщение FreshMan »

есть некая структура

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

typedef struct{
	
	char chunkId[4];

	char format[4];

	char subchunk1Id[4];

	unsigned short audioFormat;

	unsigned short numChannels;

	unsigned long sampleRate;

	unsigned long byteRate;

	unsigned short blockAlign;

	unsigned short bitsPerSample;

	char subchunk2Id[4];

	unsigned long subchunk2Size;

}HEADER;

HEADER wav_header;
как обратится, считать данные, к примеру, с 0 или 5 или 30 байта данной структуры ?
Tell Me The Truth
Ответить

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