は、誰もが機能foo1の自動のchar * Qは()は常にP =バーの後に初期化されることを私が保証C++標準での参照に私を指すことができます()がfoo1()で呼び出されました。私はfoo2()のような新しいブロックを作成するのに慣れていて、最適化コンパイラが過度にブロックされ、編集的になっているのだろうかと思っています。または、私は編集的であると正しく、コンパイラがコードを最適化しないと仮定してはいけません。p = bar()は常により前に呼び出されます。? ありがとう!C++の初期化は
#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;
}
あなたは "恐ろしいCコードはC++を装った" wow-を言うことができますか? – Puppy
現時点では標準の特定の部分を指すことはできませんが、探すべきキーフレーズは*シーケンスポイント*です。 –
@標題私は 'char * q = p;'を 'char * q(p);'と書くことを好みます。 'q'と混同しないでください。 'char *' – Mahesh