- 1
Являются ли стандартные либы частью языка Си.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 13
−12
Являются ли стандартные либы частью языка Си.
Холивар
−52
static volatile stm32f4_usart *usart_get_regs(const console_tbl *ct)
{
return (stm32f4_usart *) ct->ulCtrlPort1;
}
А если будет замест volatile - inline, возможен вариант, что компилятор выкинет эту функцию?
−26
Оптимизатор xyев.
enum tag {
INT16 = 0,
FLOAT32
};
union type {
struct int16 {
int x;
int z;
} int16;
struct float32 {
float x;
float z;
} float32;
enum tag tag;
} axis;
void foo(void *foo, enum tag tag)
{
int x = 7;
int z = 4;
if(tag == INT16) {
*(int *)(&foo)[0] = *(int *)&x;
*(int *)(&foo)[1] = *(int *)&z;
}
.......
}
/**Теперь по нормальному
void foo(void *foo, enum tag tag)
{
int x = 7;
int z = 4;
if(tag == INT16) {
int *ptr = (int *)foo;
ptr[0] = x;
ptr[1] = z;
}
.......
}
**/
int main(void)
{
axis.tag = INT16;
foo((axis.tag == INT16)? (void *)&axis.int16 :
(void *)&axis.float32,
axis.tag);
return 0;
}
данные обрабатываются в одном из двух форматов, решил сделать приведение типов, не заводя ещё одну переменную, в итоге всё наибнулось. Мораль - нейух выёживаться - пиши нормально.
А можно ли действительно не писать, что то вроде int *ptr = (int *)foo;, а сразу работать с void'овым указателем?
−47
float *quaternions;
for(size_t i = 0; i < 4; i++) {
((int32_t *)&quaternions)[i] = __builtin_bswap32(((int32_t *)&quaternions)[i]);
}
/**GCC: "какая-то магия с приведением и разворотом. Меня всё устраивает, всё ок." **/
А если:
((int32_t *)&quaternions)[0] = __builtin_bswap32(((int32_t *)&quaternions)[0]);
/**GCC: "warning: dereferencing type-punned pointer will break strict-aliasing rules" **/
−46
for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
{
/* There is nothing to do here, just iterating to the wanted
insertion position. */
}
Встал остро вопрос выбора использования ОС в команде. Сперва я с пеной у рта пытался навязать использование ОСи как таковой, теперь когда согласились, новый спор. Собираются использовать freertos. А у меня слёзы наворачиваются, когда я вижу подобное говно: стиль тупой блондинки, тяжело воспринимаемые конструкции, модули по 2к+ строк кода, безмозглые комменты и т.д. Для реализации проекта будет годна RTEMS, но к сожалению, я не успел толком её попробовать, что бы конкретно привести факты: быстрее, выше, сильнее. Если говорить только про code style, меня никто слушать не станет. Может есть кто кинет в меня умными ссылками, где freertos смешают с говном?
−50
#include <stdio.h>
#include <stdint.h>
int main(void)
{
size_t foo = -5;
uint8_t foo1 = -5;
printf("%d %d", foo, foo1);
return 0;
}
А почему лыжи не едут? size_t же ведь беззнаковый.
З.Ы. и да мне стыдно
−47
static struct frame rx_frame = {
.data = rx_buffer,
.sz = sizeof(rx_buffer)
};
...
где-то в том же модуле:
struct frame *task_communication_receive_frame(void)
{
memset(rx_frame, 0, sizeof(rx_frame));
...
}
Действительно, чёй-то какая-то срань принимается
−52
#!/bin/bash
git reset --hard
git checkout --orphan temp
git branch > branches
branch_list=()
while read LINE;
do
branch_list+=("$LINE");
done < branches
for str in "${branch_list[@]}";
do
[ "$str" == "* temp" ] && break
git branch -D "$str"
done
git checkout -b master
git branch -D temp
printf "#include \"stdio.h\" \n\n int main(void)\n{\n\tprintf(\"Ebat' ti loh\");\n\treturn 0;\n}" > main.c
git add main.c
git commit -am "pobeditel' po jizni"
gcc --std=gnu89 main.c -o out.o
while :
do
./out.o
printf "\n"
done
Вышел патч для git. Добавляешь в репо с проектом и запускаешь.
патч чистит всё говно, что найдет.
Навеяно комментом @kerman из Говнокод #19735
−48
#include <stdio.h>
#include <stdint.h>
#include <string.h>
struct foo {
uint16_t a;
uint16_t b;
uint16_t c;
};
struct posted {
uint8_t **ptr;
} posted = {
.ptr = (uint8_t *[]) {(uint8_t *)&(struct foo) {.a = 0x1011, .b = 0x1213, .c = 0x1415},
(uint8_t *)&(struct foo) {.a = 0x1617, .b = 0x1819, .c = 0x2021},
NULL}
};
int main(void)
{
for(uint8_t *ptr = &(*posted.ptr)[0];; ptr++) {
static size_t idx;
printf("%x ", *ptr);
if(ptr == sizeof(struct foo) - 1 + *(idx + posted.ptr)) {
idx++;
ptr = *(idx+posted.ptr);
if(ptr == NULL) break;
}
}
return 0;
}
Структура головного мозга
−97
//прерывание по таймеру А
ISR(TIMER1_COMPA_vect)
{
u08 i=0; // локальная переменная
cli();
PORTD |= _BV(PD4); // Вывод PD4 в 1. Выход ШИМ
TCNT1H = 0x00;
TCNT1L = 0x00;
// Динамическая индикация
Shet_ind+=1;
if (Shet_ind==7)
{
PORTC &= 0x70;
PORTB=0;
};
// Подготовка указателя
if (Ukaz_Herc) //
{
Ukaz_znash = (Ukaz_znash+1)&0x0f; // 1кГц
// Загрузить новое значение ШИМ !!!!!!!
OCR1BH = tabl1 [Ukaz_znash][0];
OCR1BL = tabl1 [Ukaz_znash][1];
if (Ukaz_znash==0) {Kol_period-=1;};
}
else
{
Ukaz_znash = (Ukaz_znash+1)&0x07; // 2кГц
// Загрузить новое значение ШИМ !!!!!!!
OCR1BH = tabl2 [Ukaz_znash][0];
OCR1BL = tabl2 [Ukaz_znash][1];
if (Ukaz_znash==0){Kol_period-=1;};
};
// 1-Wire Сброс, передача 1, передача 0
if (Zaxvat1Wire<20000) {Zaxvat1Wire+=1;}; // Инкремент пропущенных захватов
if (Per1Wire!=0)
{
if (Per1Wire>1) DDR |= _BV(DDD7); // Порт D PD7 на выход. Выход 1-Wire на линии 0
//Вставить ожидание 1 мкС
QDEL;
if (Per1Wire-=1)
{
DDR &= ~(_BV(DDD7)); // Линия 1-Wire линия 7 порта D на вход. На линии 1
Zaxvat1Wire=0; // Сброс инкремента пропущенных захватов
};
};
// 1-Wire Cчётчик пропущенных захватов фронтов
// Счёт кол периодов
/*****А ТЕПЕРЬ ПОЗНАЙ ИСТИННУЮ БОЛЬ!*****/
if (Kol_preiod==0)
{
if(Buf_bit)
{ // Передаем бит
//Проверка передаваемого бита
if (Buf_bit>1 && Buf_bit<10) // передаем значащие биты
{
i=0; // Передаем 0
if (bit_is_set(Buf_vtor [Buf_baite], Buf_bit-2)) {i=1;}; // Передаем 1
};
if (Buf_bit==10) i=0; //Передаем старт бит
if (Buf_bit==1) i=1; //Передаем старт бит
if (i)
{Ukaz_Herc = 0x01; Kol_period=10; } // Передаем 1 OCR1AH = 0x01; OCR1AL = 0xF4; Ukaz_znash=0;
else
{Ukaz_Herc = 0x00; Kol_period=20; } // Передаем 0 OCR1AH = 0x01;
OCR1AL = 0xF4; Ukaz_znash=0;
Buf_bit-=1;
};
if (!Buf_bit)
{ // Биты кончились меняем байты
if(Buf_baite) {Buf_baite -=1; Buf_bit=10;}
else
{Buf_bit=1;};
};
};
// Динамическая индикация
if (Shet_ind==7 && IndOn)
{
Shet_ind=0;
Delitel += 1; //Инкремент дополнительного делителя
if (!pos) {Brightness_shet=(Brightness_shet+1)%8;};
PORTB=digits[pos];
if (Brightness_shet<=Brightness) {PORTC |= 1<<pos;}; //Регулировка яркости
};
sei();
}
Тут есть всё на любой извращённый вкус. Этот лютый пиздец я отрыл на каких-то распечатаных листах.
(Листинг 28 страниц, Карл! 28 страниц, 10 шрифтом)