Возможно. По крайней мере, судя по приведённой БПФ, эти гармоники ускользают от возможностей данного прибора (не Keysight, конечно, но, «маємо те, що маємо»).
на аналоговом осциллографе виден даже 1%, у @dimax неплохой с 2 гигасемплами думаю 1% тоже будет видно
А если надо знать точно то C6-22 в помощь (только кому эта точность нужна)
А разве не эквивалентно ‘а = 1’? 6, если ‘a = (1,2,3,4,6)’, не? Лень проверять.)
Не. Операция “запятая” выполняется слева направо. Т.е. ,теоретически, а=1, потом а=2, … а=6. Но оптимизатор выкусит все эти присвоения и оставит последнее.
А еще бывает вот такой вот кот:
uint ieee80211_is_robust_mgmt_frm(int param_1,uint param_2) {
uint uVar1;
uVar1 = 1;
if (((param_1 - 0xa0U & 0xffffffdf) != 0) && (uVar1 = 0, param_1 == 0xd0)) {
if ((int)param_2 < 0x17) {
uVar1 = 1;
if (3 < (int)param_2) {
uVar1 = 0x708890U >> (param_2 & 0x1f) & 1 ^ 1;
}
}
else if (param_2 != 0x7f) {
uVar1 = 1;
}
}
return uVar1;
}
Обрати внимание на if, на вторую его половину. && делается с последним выражением. А присвоение, стоящее перед ним - просто выполняется. Такой вот код генерит GCC для ESP32 :))) Это дизассемблированное. “Молоко восстановленное“
Не поленился. С goodbolt что то муторно, уже забыл как делать вывод на консоль.( Проще с Ардуино.
void setup() {
Serial.begin(9600);
int a,c;
a = (1, 2, 3, 4, 6);
c = 1, 2, 3, 4, 6;
Serial.print("a = "); Serial.println(a);
Serial.print("c = "); Serial.println(c);
}
void loop() {
}
Вы правы, так и есть.
А вот, например,
int a = 1,2,3,4,6;
недопустимо в принципе – синтаксически неверно.
В то же время
int a = (1, 2, 3, 4, 5, 6);
Вполне нормально и присваивает a значение 6.
Но я бы не стал использовать слово “эквивалентно”. Дело в том, что все эти значения (до шестёрки) будут реально вычисляться. В случае констант (как здесь) – это пофиг, а вот если так:
// Есть функция
int kaka(void) {
Serial.println("Kaka");
return 10;
}
// .....
// а потом где-то пишем
int a = (1, 2, kaka(), 4, 5, 6);
Здесь, хотя в данном выражении a просто получает значение 6, функция kaka() будет реально вызвана и своё в сериал выплюнет.
Используя то, что все члены выражения в скобках реально будут вычисляться (в порядке слева направо), можно, на побочных эффектах, такого наговнокодить - мама не горюй!
А , вы про скобки?! Я про это даже не подумад. Я всегда пишу в скобках. Но вот , что с==1 можно получить, я не знал, спасибо за информацию.
Да, warning-и пишет и для а, и для с
А вон, скриншот выше же. Я, честно говоря, такое вообще в первый раз вижу.
Какой скриншот, Вы о чём?
Сообщение номер тысяча, самый его низ.
И что про него? Я не понимаю Вашего вопроса.
Там выражение, которое вы назвали синтаксически неверным, компилируется и дает результат ц=1. Что вообще говоря, неожиданно. Надо взять на вооружение.
Я хоть и склеротик полный, но в голове ещё что то держится.)
Интересно. Поучается, что это эквивалент
c=1;
2;
3;
6;
Но компилируется. Ну и хорошр, раз так. Очень полезный трик для обфускации кода.
Нет, Вы ошиблись. Там другое выражение. Про то, что там, я как раз написал
Сравните выражение, которое там:
с тем, о котором пишу я
Неужели не видите разницы? Ну тогда попробуйте моё скомпилировать ![]()
при объявлении с инициализацией не работает, что-ли?
нет.
У запятой самый низкий приоритет.
a = 1, 2, 3;
это
a = 1;
2 ;
3;
При этом int a = 1,2,3;
это
int a=1;
int 2;
int 3;
Что невозможно, так как бессмысленно и абсурдно ![]()
Ок? Ты и сам это знал, просто видимо задумался!
Ну, типа того.
Кстати, чтобы уж не быть голословным в
Держите
#define print(t, x, y) do { Serial.print(t#x"="); Serial.print(x); Serial.print("; "#y"="); Serial.println(y);} while (false)
void setup(void) {
Serial.begin(9600);
int a = 132, b = 321;
// Задача: поменять местами значения a и b, не используя временную переменную
print("Before: ", a, b);
a = a + b, b = a - b, a = a - b;
print(" After: ", a, b);
}
void loop(void) {}
Вот, вчерашняя новость ![]()
…пора уже с учителей спрашивать почему дети не пользуются ИИ на уроках?
