Первый случай явно запрещен согласно #if
документации:
В выражении нельзя использовать sizeof или оператор приведения типа.
Что касается предупреждения, вы можете либо проигнорировать его (потому что вы знаете, что ваш код в порядке), либо отключить его с помощью #pragma
, либо просто взять условие из if
:
bool sizeMatch = (sizeof(a) == sizeof(b));
if (!sizeMatch){
printf("sizes don't match\n");
return -1;
}
Редактировать: так как отключение ошибки, похоже, привлекло некоторое внимание, вот несколько способов добиться этого с помощью #pragma warning
:
#pragma warning (push)
#pragma warning (disable: 4127)
if(sizeof(a) != sizeof(b)){
#pragma warning (pop)
// ...
Очевидно, что всплывающее окно можно сделать дальше по коду. Другой вариант может быть:
#pragma warning (disable: 4127)
if(sizeof(a) != sizeof(b)){
#pragma warning (default: 4127)
Что снова включит предупреждение, не нажимая и не щелкая.
В любом случае, этот код выглядит ужасно. IMO, просто использование bool
для получения результата сравнения sizeof
(как показывает мой первый фрагмент) будет самым чистым решением.