Сб мар 28, 2020 20:26:51
Ну в первую очередь надо спросить у вас, что вы имели в виду под "нестрогой типизацией" в конкретном случае. Вы ведь вели речь о "ворнингах", то есть имели в виду конкретные ситуации в коде, а не какой-то огульный холивор. Приводите примеры. А далее - стандарт языка С. Авторитетнее некуда.
Сб мар 28, 2020 20:46:26
Вс мар 29, 2020 05:39:04
double d = 42.0;
switch (d)
{
case 42:;
}
void foo()
{
goto abc;
}
void bar()
{
const int a = 42;
++a;
}
{
char i;
int i;
}
int main()
{
int *a = 0;
char *b = a;
}
Вс мар 29, 2020 09:10:47
как бы отличить ошибку просто: проект не собирается. или вы можете привести пример, как можно получить exe-шник для кода, в котором имеются участки, вами же приведенные в качестве ошибок "ограничений"?KorbenDallas писал(а):Как вы сами понимаете (и как я говорил выше) в такой ситуации отличить первые от вторых можно
1) на основе знания стандарта языка С, или
2) путем "затягивания гаек" в настройках компилятора, чтобы заставить компилятор рапортовать "ошибки" как "error...".
Но малоопытные пользователи языка С, как правило, не умеют ни того, ни другого. В результате рождаются мифы об "отсутствии контроля типов в С" и прочая подобная чушь.
Вс мар 29, 2020 10:19:30
как бы отличить ошибку просто: проект не собирается. или вы можете привести пример, как можно получить exe-шник для кода, в котором имеются участки, вами же приведенные в качестве ошибок "ограничений"?KorbenDallas писал(а):Как вы сами понимаете (и как я говорил выше) в такой ситуации отличить первые от вторых можно
1) на основе знания стандарта языка С, или
2) путем "затягивания гаек" в настройках компилятора, чтобы заставить компилятор рапортовать "ошибки" как "error...".
Но малоопытные пользователи языка С, как правило, не умеют ни того, ни другого. В результате рождаются мифы об "отсутствии контроля типов в С" и прочая подобная чушь.
#include <stdio.h>
int main(void)
{
const int *a = "Hello World";
char *b = a;
printf("%s\n", b);
}
void foo(char *p, struct S *q)
{
int a = p;
}
warning: 'struct S' declared inside parameter list will not be visible outside of this definition or declaration
warning: initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]
warning: 'struct S' declared inside parameter list will not be visible outside of this definition or declaration
error: initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]
const int *a = "Hello World";
char *b = a;
const int *a = (const int *) "Hello World";
char *b = (char *) a;
Вс мар 29, 2020 10:29:31
Чт май 21, 2020 18:13:46
Чт май 21, 2020 18:28:43
void send(uint16_t data)
{
for (uint8_t i = 0; i < 16; i++) {
if (data & 0x0001) {
PORTB |= (1<<3); // set bit 1
} else {
PORTB &= ~(1<<3); // set bit 0
}
// strob or something else
data >> 1; // shift data
}
}
Чт май 21, 2020 19:32:27
Чт июн 04, 2020 11:13:28
Чт июн 04, 2020 11:55:26
Чт июн 04, 2020 12:32:14
Чт июн 04, 2020 12:57:53
Чт июн 04, 2020 13:08:51
Чт июн 04, 2020 13:11:23
#define i 0b00000010
#define j 0b00000100
Чт июн 04, 2020 13:26:48
Чт июн 04, 2020 13:31:25
Чт июн 04, 2020 13:34:18
Чт июн 04, 2020 13:44:06
0b00000010 и 0b00000100 сразу 0b0000011
Чт июн 04, 2020 13:45:09