относительно типа bool:
В C любое ненулевое значение считается «истинным» (а ноль - «ложным»). Это удобно, например, при проверке значения указателя:
if ((ptr = malloc(sizeof(foo))) != 0) ...
можно сократить до:
if (ptr = malloc (sizeof (foo))) ... ... 1006 *
C был разработан, чтобы быть языком "среднего уровня", то есть между ассемблером и традиционными языками "высокого уровня". Это было также разработано, чтобы быть компактным / кратким. Таким образом, он имеет минималистский характер, примером которого является поддержка «сокращения», подобного приведенному выше, а также отсутствие встроенного логического типа данных (до C99, как указывали другие).
Многие библиотеки / фреймворки (о которых я все равно знаю) делают что-то вроде следующего
#define BOOL int
#define FALSE 0
#define TRUE (!FALSE)
Это означает, что вам следует избегать прямого сравнения значений / результатов с ИСТИНОЙ. Учтите следующее. Учитывая int a = 2; int b = 3;
, тогда и if (a)
, и if (b)
оцениваются как истина, но a
и b
не равны.
Относительно подсветки синтаксиса:
C ++ действительно имеет тип bool, который, я предполагаю, почему компилятор выделяет это слово. Однако тот факт, что ваш исходный файл заканчивает его .c помечает его как код C, поэтому тип не разрешен.
Похоже, подсветка синтаксиса должна поймать это, хотя.
Относительно отсутствия компонентов C:
Если я правильно понимаю вопрос: короткий ответ таков: для разработки «управляемого кода» (т. Е. .NET) - то, что вам нужно сделать, чтобы использовать компоненты .NET - вам нужно используйте язык, поддерживаемый средой выполнения .NET, например C #, VB (.NET), F # или C ++.
(C ++ доступен как в «управляемом», так и в «неуправляемом» вариантах, что означает, что вы можете разрабатывать как на .NET, так и на Windows API.)
Есть ли у вас какая-то директива использовать C в отличие от других языков?