私はポインタをtypedef'ngするのが悪いことを示した例を見ていました。私がこの例について理解していなかった部分は、コンパイラが問題を捕らえることができなかった理由です。私は、次のコードに例を詳述:ポインタとconstをtypedef'ngする
#include <stdio.h>
typedef int *TYPE;
void set_type(TYPE t) {
*t = 12;
}
void foo(const TYPE mytype) {
set_type(mytype); // Error expected, but in fact compiles
}
int main() {
TYPE a;
int b = 10;
a = &b;
printf("A is %d\n",*a);
foo(a);
printf("A is %d\n",*a);
return 0;
}
だから、私はa
の値を変更することができました。この例では、問題を解決するためにtypedef const int *TYPE
を実行する必要があると説明されていましたが、関数の引数自体にTYPE to be const
を設定しているときに、コンパイラがエラーをキャッチできない理由を理解できません。私は何か非常に基本的なものが欠けていると確信しています
答えてください。ポインタをtypedefすると、 "* syntax sugar *"のメリットよりも多くの問題が発生します。 –
あなたが正しいと確信していますが、申し訳ありませんが、私が探していた答えではありませんでした。 –
問題は、実際にはポインタの意味を隠すことに起因しています。 @iharobは次のように書きました。ポインタを 'typedef'しないでください。それはちょうど混乱と微妙なエラーにつながります。関数の中で 'a 'の値を変更することはできませんが、' * a'、つまり 'b'だけを変更することができます。 'a'はまったく役に立たないので、'&b'を 'foo'に渡して' b'を直接出力することができました。 – Olaf