Может кто-нибудь указать мне ссылку в стандарте C ++, которая гарантирует, что автоматическое char * q в функции foo1 () всегда будетинициализируется после вызова p = bar () в foo1 () .Я так привык к созданию нового блока, как в foo2 () , и мне интересно, слишком ли я тупой и параноидальный оптимизирующий компилятор.Или я прав, будучи параноиком, и не должен предполагать, что компилятор не будет оптимизировать код так, чтобы p = bar () всегда вызывался до q (p) ?Спасибо!
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
char* bar()
{
char* t = (char*)malloc(15);
strcpy(t, "Hello World!");
return t;
}
void foo1(void)
{
char* p = NULL;
printf("foo1: do some stuff\n");
p = bar();
printf("foo1: do some more stuff\n");
char* q(p);
printf("foo1: q says:%s\n", q);
free(p);
}
void foo2(void)
{
char* p = NULL;
printf("foo2: do some stuff\n");
p = bar();
printf("foo2: do some more stuff\n");
// is this block necessary?
{
char* q(p);
printf("foo2: q says:%s\n", q);
}
free(p);
}
int main(int ac, char* av[])
{
foo1();
foo2();
return 0;
}