char*
if-then-else 論理フローに使用される関数引数を持つレガシー コードがあります。例えば:
void myFunc(char *f_reset) {
.....
.....
if(*f_reset) {// do this;}
else {// do that;}
}
myFunc(char *f_reset)
から電話しているとします。main()
void main(void) {
char r = 0;
char *f_reset = &r;
*f_reset = 0;
myFunc(f_reset); // Debug and enter this function
}
関数呼び出しに入ろうとすると、それが false*f_reset
として評価されることは決してないことがわかります。これは、ガベージなどのために常に true です。0
-8342345825
使用している理由char*
は、おそらく昔は boolean が char *? よりも多くのメモリを使用していたためです。過去に Stackoverflow の投稿で読んだもの。
char*
論理的 true false との関係について、ダミーのガイドを教えてもらえますか?