LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

UB и прочее - нихрена тебе не дает вообще от слова совсем

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

На Си пишут всегда зная конкретное ABI конкретной комбинации ОС и процессора

На компилятор это не влияет, он следует стандарту С, внутренняя реализация это не то что я обсуждаю.

Очевидно что для x86 указатель будет представлен в итоговом коде как ячейка с числом, но перед этим компилятор будет работать исходя из абстракций С.

static int a, b;

int main() {
  int *pa = &a, *pb = &b + 1;
  if (pa == pb) {
    printf("A\n");
  } 
  if ((long)pa == (long)pb) {
    printf("B\n");
  } 
  return 0;
} 
./a.out 
B

И вот раз ты этого не знаешь

Какой глупый вывод.

Исправление MOPKOBKA, :

UB и прочее - нихрена тебе не дает вообще от слова совсем

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

На Си пишут всегда зная конкретное ABI конкретной комбинации ОС и процессора

На компилятор это не влияет, он следует стандарту С, внутренняя реализация это не то что я обсуждаю.

Очевидно что для x86 указатель будет представлен в итоговом коде как ячейка с числом, но перед этим компилятор будет работать исходя из абстракций С.

Поэтому несмотря на то что gcc генерирует код для x86, несмотря на то что ты можешь в идеале знать как x86 устроен и работает, ./a.out тебе выдаст в следующем коде «0xAAAA\n0xAAAA\nfalse\n»

printf("%p\n", p1);
printf("%p\n", p2);
if (p1 == p2) {
  puts("true");
} else {
  puts("false");
}

И вот раз ты этого не знаешь

Какой глупый вывод.

Исправление MOPKOBKA, :

UB и прочее - нихрена тебе не дает вообще от слова совсем

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

На Си пишут всегда зная конкретное ABI конкретной комбинации ОС и процессора

На компилятор это не влияет, он следует стандарту С, внутренняя реализация это не то что я обсуждаю.

Очевидно что для x86 указатель будет представлен в итоговом коде как ячейка с числом, но перед этим компилятор будет работать исходя из абстракций С.

И вот раз ты этого не знаешь

Какой глупый вывод.

Исправление MOPKOBKA, :

UB и прочее - нихрена тебе не дает вообще от слова совсем

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

На Си пишут всегда зная конкретное ABI конкретной комбинации ОС и процессора

На компилятор это не влияет, он следует стандарту С, внутренняя реализация это не то что я обсуждаю.

И вот раз ты этого не знаешь

Какой глупый вывод.

Исправление MOPKOBKA, :

UB и прочее - нихрена тебе не дает вообще от слова совсем

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

На Си пишут всегда зная конкретное ABI конкретной комбинации ОС и процессора

На компилятор это не влияет, он следует стандарту С, внутренняя реализация это не то что я обсуждаю.

И вот раз ты этого не знаешь

Какой глупый вывод.

Исходная версия MOPKOBKA, :

UB и прочее - нихрена тебе не дает вообще от слова совсем

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

На Си пишут всегда зная конкретное ABI конкретной комбинации ОС и процессора

На компилятор это не влияет, он следует стандарту С, внутренняя реализация это не то что я обсуждаю.

И вот раз ты этого не знаешь

Какой глупый вывод.