Флаг компилятора в GCC (C) - PullRequest
0 голосов
/ 03 октября 2018

Я прочитал документацию GCC и человека.Если я скомпилирую код как (1) gcc -o test test.c, я получу некоторые результаты при его выполнении.Если я скомпилирую его как (2) gcc -O -o test test.c, я получу разные результаты при его запуске.

Читая пользователя GCC, я скомпилирую, используя (вместо -O) все параметры, которыемужчина говорит, что опция -О активна.Я не получаю тот же результат, что и в варианте (2).Результатом является предложение (1).Что (и не документировано) изменяет поведение сгенерированной программы?Тестовый код:

#include <stdio.h>

int var1 = 0;
int var2 = 0;

int main() {
    int *pntr = &var2;
    pntr--;
    (*pntr) = 99;
    printf("Var1=%d\n",var1);
    printf("Var2=%d\n",var2);
}

1 Ответ

0 голосов
/ 03 октября 2018

Нет УБ, нет проблем

#include <stdio.h>

union 
{
  struct
  {
    int var1;
    int var2;
  };
  int arr[2];
}u;

int main() {
    int *pntr = &u.arr[1];
    pntr--;
    (*pntr) = 99;
    printf("Var1=%d\n",u.var1);
    printf("Var2=%d\n",u.var2);
}
...