Мне было интересно, что было бы лучшим и/или самым быстрым способом проверки NULL нескольких указателей файлов и исключения «плохих» (NULL)? Можно ли этого добиться с помощью оператора switch
?
Мой «нормальный/базовый» подход:
FILE *fp1, *fp2, *fp3;
fp1 = fopen(foo, bar);
/* etc.. */
if (!fp1)
/* do something */
return 1;
if (!fp2)
return 2;
...
.. но этот подход кажется слишком длинным, особенно если нужно проверить слишком много указателей. Есть ли трюк, чтобы сделать это более удобно?
Другими словами (или код), что-то вроде этого:
if (!fp1 || !fp2 || !fp3) {
/* one of the pointers is NULL, let's *somehow* check which one it is */
} else {
/* everything OK */
}
Я новичок, и я думал об использовании оператора switch
. Чтобы быть более конкретным, я думал (снова) каким-то образом сравнить указатели файлов с NULL, но я не могу понять, как написать такой код, поскольку выражение, используемое в операторе switch
, должно быть целым числом, но, с другой стороны, разве NULL
не равно 0?
Приношу свои извинения, так как это кажется тривиальным вопросом, но я не смог найти ничего о нулевой проверке множественных указателей, подобных этому.
Заранее спасибо!
thing_N
, гдеN
— число, это сильный намек на то, что вам нужен массив —FILE *fp[3]
. Таким образом, вы можете использовать цикл для проверки -for ( int i = 0; i < 3; i++ ) { if ( !fp[i] ) { /* handle file error */ } }
. - person John Bode   schedule 20.12.2019