Вопросы по теме 'sequence-points'

Еще один запрос точки последовательности: как работает * p ++ = getchar ()?
§5.1.2.4.16 ПРИМЕР 7 Группировка выражения не полностью определяет его оценку. В следующем фрагменте: #include <stdio.h> int sum; char *p; /* ... */ sum = sum * 10 - '0' + (*p++ = getchar()); оператор выражения сгруппирован, как...
305 просмотров
schedule 01.12.2021

Является ли запись нового значения частью вычисления значения в выражении до приращения или это побочный эффект?
Рассмотрим следующее выражение (с объявлением для демонстрации): int n = 42; --n &= 0x01; Это нарушает правила последовательности? На мой взгляд, предварительное приращение необходимо как часть «вычисления значения» левого операнда....
146 просмотров

Замена значений с помощью XOR
В чем разница между этими двумя макросами? #define swap(a, b) (((a) ^ (b)) && ((a) ^= (b) ^= (a) ^= (b))) Or #define swap(a, b) (((a) ^ (b)) && ((b) ^= (a) ^= (b), (a) ^= (b))) Я видел второй макрос здесь , но...
367 просмотров

Является ли поведение i = post_increment_i () указанным, неопределенным или неопределенным?
Рассмотрим следующую программу на C: int i = 0; int post_increment_i() { return i++; } int main() { i = post_increment_i(); return i; } Что касается версии стандарта C 2011 года (известного как C11), какая из следующих альтернатив...
397 просмотров

Постинкремент, вызовы функций, концепция точки следования в GCC
Есть фрагмент кода, в котором GCC выдает результат, которого я не ожидал: (Я использую gcc версии 4.6.1 Ubuntu/Linaro 4.6.1-9ubuntu3 для цели i686-linux-gnu) [тест.с] #include <stdio.h> int *ptr; int f(void) { (*ptr)++;...
586 просмотров
schedule 04.04.2022

Правильно сформированные пары в вызове функции
Это вопрос о нормах стандарта C11, касающихся побочных эффектов, когда аргументы функции оцениваются в выражении. Я пытаюсь определить макрос в стандартном C, который эмулирует подобный «методу» синтаксис языка ООП, в зачаточном состоянии. Я...
59 просмотров
schedule 08.05.2022

В C ++ 17 должен ли этот код выдавать предупреждения?
Как видно на этой ссылке clang в режиме C ++ 14 (но не в C ++ 17) и GCC в режиме C ++ 17 выдают предупреждения о последовательности. Я предположил, что в C ++ 17 все вещи в правой части = оцениваются до lhs, поэтому я не уверен, правильно ли...
99 просмотров
schedule 24.05.2022

Что может быть подвыражением?
Я прочитал "C++. Primer plus. Stephen Prata" (6-е издание). На странице 209 было: y = (4 + x++) + (6 + x++); Выражение 4 + x++ не является полным выражением, поэтому C++ не гарантирует, что x будет увеличено сразу после вычисления...
1030 просмотров
schedule 14.06.2022

Оператор C += Точка последовательности?
Это определенное поведение? *p += *p--; И если да, то эквивалентен ли он { p[0] += p[0]; --p; } или { p[-1] = p[0]; --p; } ? Я предполагаю, что быть определенным или нет, зависит от того, имеет ли += неявную точку последовательности,...
121 просмотров

Неопределенное поведение и точки последовательности перезагружены
Считайте эту тему продолжением следующей темы: Предыдущий выпуск Неопределенное поведение и точки последовательности Давайте вернемся к этому забавному и запутанному выражению (выделенные курсивом фразы взяты из темы выше *...
12286 просмотров

Битовые поля и точки последовательности
Для реализации, которая упаковывает f0 и f1 в один и тот же байт, определена ли программа ниже? struct S0 { unsigned f0:4; signed f1:4; } l_62; int main (void) { (l_62.f0 = 0) + (l_62.f1 = 0); return 0; } Меня...
709 просмотров
schedule 24.04.2023

Почему выражение a = a + b - ( b = a ) дает предупреждение о точке последовательности в С++?
Ниже приведен тестовый код: int main() { int a = 3; int b = 4; a = a + b - (b = a); cout << "a :" << a << " " << "b :" << b << "\n"; return 0; } При компиляции выдается следующее...
2727 просмотров

Запутанные ответы: один говорит, что *myptr++ сначала увеличивает указатель, другой говорит, что *p++ разыменовывает старое значение указателя.
Буду признателен, если вы проясните это для меня. Вот два недавних вопроса с их принятыми ответами: 1) Что такое разница между *myptr++ и *(myptr++) в C 2) Еще одна последовательность точечный запрос: как работает *p++ = getchar()?...
303 просмотров

Почему я получил операцию, которая может быть неопределенной в выражении оператора на С++?
чтобы просто описать проблему, взгляните на код ниже: int main() { int a=123; ({if (a) a=0;}); return 0; } Я получил это предупреждение от [-Wsequence-point] Line 4: warning: operation on 'a' may be undefined моя версия...
4723 просмотров
schedule 19.03.2023

Неопределенное поведение и точка последовательности
Последние несколько дней я пытался узнать о неопределенном поведении . Несколько дней назад я нашел ссылку c-faq . Это очень помогает устранить многие недоразумения, но создает еще одну большую путаницу, когда я читаю вопрос # 3.8 . После того,...
423 просмотров

Точка последовательности из вызова функции?
Это еще один вопрос о последовательности, но довольно простой: #include <stdio.h> void f(int p, int) { printf("p: %d\n", p); } int g(int* p) { *p = 42; return 0; } int main() { int p = 0; f(p, g(&p)); return 0; } Это...
888 просмотров
schedule 09.05.2023

C Объяснение оператора приращения
При выполнении этой части команды C вывод num равен 7. Я ожидал, что это будет 6, может ли кто-нибудь объяснить, почему и как получается 7? #include <stdio.h> int main() { int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int i = 0,...
200 просмотров

Неопределенное поведение в C
На этом веб-сайте в последнем разделе они предоставили f(i = -1, i = -1) в качестве примера. неопределенного поведения из-за непоследовательного вычисления подвыражений в аргументах функции. Но поскольку после оценки всех аргументов функции и...
56 просмотров
schedule 05.11.2022

Операторы C и приоритет
Я использую язык C для кода ниже: #include <stdio.h> int main(int argc, char const *argv[]) { int num1=0; int res = ++num1 && num1++; printf("%d\t%d\n",num1,res); } В приведенном выше коде я получаю...
68 просмотров