C没有布尔?也是VS2010的问题

如何解决C没有布尔?也是VS2010的问题

| 我正在使用VS 2010 Pro。 首先,C没有布尔类型?我只需要将int与0/1一起使用。似乎有些奇怪,因为大多数语言都将布尔值视为标准类型。 我也有Visual Studio 2010 Pro,但没有\“ C Project \”。我刚刚创建了一个空的C ++项目。文件名以.c结尾 这样做的问题是关键字混乱了(在编辑器中布尔显示为突出显示/有效,但编译器不喜欢)。 我去修理/添加组件,它们有C#,F#,C ++,Visual Basic;但是没有C?     

解决方法

最新的C标准(C99)确实具有布尔型。只要加上
stdbool.h
就可以使用。不幸的是,MSVC根本没有适当的C支持。仅部分C89。     ,当前的C语言(C99)具有
bool
类型(实际上是
_Bool
,但包括
stdbool.h
则为其声明了
typedef
别名
bool
),但是由于您正在使用MSVC,因此该语言不可用。无论如何,在C语言中使用布尔类型是完全惯用的,并且在很大程度上是无用的。像其他人一样使用
int
。或者,如果您需要它们的庞大数组,请自己制作位数组实现。     ,直到C99,C才具有实际的布尔类型。 结果,惯用的C并没有真正使用布尔值的符号或表达式(即,您不会看到针对\“ true \”或\“ false \”的许多显式测试)。取而代之的是,任何零值整数表达式或NULL指针都将求值为\“ false \”,而任何非零值整数表达式或非NULL指针均将求值为\“ true \”。因此,您将看到很多代码,例如:
foo *bar = malloc(sizeof *bar * ...);
if (bar) // equivalent to writing bar != NULL
{
   // bar is non-NULL
} 
关系表达式和相等表达式(例如
a == b
c < d
)将求值为1(真)或0(假)的整数类型。 有些人通过做类似下面的事情来介绍自己的TRUE或FALSE符号常量。
#define TRUE  (1)  // or (!FALSE),or (1==1),or...
#define FALSE (0)  // or (!TRUE),or (1==0),or ...
不幸的是,其中一些人偶尔会拼错0或1(或应该计算为0或1的表达式)。我曾经花了一个下午追赶我的尾巴,因为有人拧紧了并扔下了标头,其中TRUE == FALSE。 并非巧合的是,那天我完全停止对布尔值使用符号常量。     ,有关
bool
类型的信息,请参见R。\'s的答案。 不幸的是,MSVC在编译C代码时不支持C99-它有些零碎(通常是C ++在C99库中需要的东西),但是在大多数情况下,它仅支持C90。 至于仍在编辑器中突出显示的ѭ1--MSVC中的突出显示可能很复杂,但没有考虑C,C ++和C ++ / CLI之间的区别。例如,如果您使用仅CLI的结构,即使您的项目与CLI无关,它也会被突出显示。     ,如果您使用C语言进行开发,则建议您使用其他编译器,因为VC ++不是现代的C语言编译器,并且不支持C99标准。如果您使用的是Windows,请尝试使用MinGW,它基本上可以使GCC可以访问Windows-y API。 如果您准备使用Visual Studio,请创建自己的头文件以代替stdbool.h使用:
#pragma once

#define false   0
#define true    1

#define bool int
我发现Visual Studio 2010抱怨如果尝试使用ѭ4而不是Visual15来定义Visual1ed。     ,关于布尔类型: 在C语言中,任何非零值都视为\“ true \”(零为\“ false \”)。例如,在检查指针的值时,这很方便:
if ((ptr = malloc(sizeof(foo))) != 0) ...
可以缩短为: 如果(ptr = malloc(sizeof(foo)))... C被设计为一种“中级”语言,即介于汇编程序和传统“高级”语言之间。它也被设计为紧凑/简洁。因此,它具有极简主义的风格,例如,它对上述“简写”的支持,以及对内置布尔数据类型的省略(如其他人所指出的,最高为C99)。 许多库/框架(无论如何我都知道)会执行以下操作
#define BOOL int
#define FALSE 0
#define TRUE (!FALSE)
这确实意味着您应该避免直接将值/结果与TRUE进行比较。考虑以下。给定
int a = 2; int b = 3;
,则
if (a)
if (b)
均为真,但
a
b
不相等。 关于语法突出显示: C ++确实有一个布尔类型,我猜这就是为什么编译器突出显示单词。但是,您的源文件以.c结尾的事实将其标记为C代码,因此不允许该类型。 不过,似乎语法高亮应该抓住了这一点。 关于缺少C组件: 如果我正确理解了这个问题:简短的答案是,为了进行“托管代码”(即.NET)开发-使用.NET组件是您要做的事情-您需要使用.NET运行时支持的语言,例如C#,VB(.NET),F#或C ++。 (C ++具有“托管”和“非托管”两种样式,这意味着您可以针对.NET或Windows API进行开发。) 您是否在某种指令下使用C而不是其他语言?     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res