2010-07-15 3 views
-2

Каким будет выход, если я пишуПочему синтаксис ошибка возникает, когда функция аннулируются проверяется в IF заявлении

В C++ if(5) будет выполняться без каких-либо проблем, но не в C# таким же образом, он будет иметь возможность работать.

if(func()){} //in C# it doesn't runs Why how does C# treats void and how in Turbo C++ 

void func() 
{ 
return; 
} 

if(null==null){}//runs in C# 

EDIT

if(printf("Hi"){} //will run and enter into if statement 

if(printf(""){}//will enter into else condition if found. 

Этот вопрос не предназначен для тех, кто не знает о Turbo Compiler

+3

'null' не' void'. – Amadan

+0

вы говорите, что 'if (void)' работает в Turbo C++? –

+0

Это тоже ошибка на C++. И вопрос не в том, __runs__, а в том, __compiles__. И C++, и C# являются _компилированными_языками, а не _interpreted_. Так что этот вопрос не имеет никакого смысла. '-1' от меня. – sbi

ответ

0

В C и C++ существует неявное преобразование int, указателей и большинство других типов для bool.

Дизайнеры C# избрали не, чтобы это было, для наглядности.

Так с

int i = 1; 
int* P = null; 

if (i && p) { } // OK in C++ 

if (i != 0 && p != null) { } // OK in C++ and C# 
+0

Это то, что я даже испытал, работая на C, C++. это тоже на Turbo Compiler. Для другого компилятора я не знаю. –

3

В отличие от C/C++, условия C# могут быть применены только к Boolean значения.
Обратите внимание, что функция void не имеет возвращаемого значения, поэтому к ней не может быть применено условие.

+0

'if (true)' is vaid и 'if (someString == Strings.Empty)' действительно, потому что вы используете операторы сравнения для проверки некоторого контекста. +1 – RobertPitt

3

Функция void ничего не возвращает, поэтому ее возвращаемое значение не может быть проверено с помощью оператора if.

Даже C++ не позволит вам это сделать.

5

В C# тип условия в операторе if должен быть неявным образом конвертирован в bool. Это уменьшает ошибки в различных ситуациях и в основном является хорошей вещью. Это предотвращает такие вещи от компиляции:

int x = ...; 
if (x = 10) // Valid in C/C++, not in C# 

Даже в C и C++, достойный компилятор предупредит вас на строке выше, хотя, если у вас есть разумный уровень предупреждений.

Я удивлен, если версия void работает в C++, хотя ...

+0

Версия void также не работает на C++. – Christian

+3

Тип условия в выражении 'if' должен быть неявным образом конвертируется в' bool' на C++. – sbi

+0

'if (x = 10)' будет генерировать предупреждение для самых последних компиляторов btw. – ereOn

1

в C/C++, отличное от нуля целое число, такое же, как логическая правда. Причина этого в том, что C/C++ не имеет определенного типа булевых типов, поэтому в качестве логических переменных использовались целые числа. Позже люди узнали, что такое неявное преобразование типа может вызвать непредвиденное поведение, когда компилятор пытается найти соответствующую перегруженную версию функции, поэтому ошибка не повторялась в C#.

Чтобы получить такое же поведение в C#, написать if (x!=0) { ... }