isblank编译警告

在使用gcc编译含有isblank函数的C代码时遇到了编译警告。警告提示isblank未声明,尽管已包含ctype.h头文件。查阅man手册发现isblank是C99标准的一部分。为消除警告,需要添加编译选项-std=c99。添加后警告消失,但引发对gcc对C99标准支持问题的思考。

最近对以前写的代码进行消除编译警告,但是有一个isblank的警告一直无法消去。

 

例子源码如下:

 

 

 

编译的结果:

 

bash-2.05b# gcc -Wall test.c test.c: In function `main': test.c:9: warning: implicit declaration of function `isblank'

 

这个警告是说isblank没有对应的函数声明,需要包含相应的头文件。

通过man isblank,所显示的信息来看,对应的头文件就是ctype.h,但还是不行呀。

 

 

后来发现,在比较新的Linux发行版中编译时则没有这个警告,只有在比较旧的版本中才有。

再仔细看了一下man isblank,偶然间瞥到man信息中的一段信息:

isascii():

_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE

isblank(): _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L; or cc -std=c99

 

一下就清楚了,isblank属于C99标准,这点通过查看ctype.h可以获得证明:

 

 

添加编译选项-std=c99,重新编译了一下,警告终于消除了:

bash-2.05b# gcc -Wall -std=c99 test.c

 

 

虽然编译警告解决了,但有一个疑问,gcc不完全支持C99标准吗? 这个等以后再学习了。

 

public void saveFieldConfig(FieldConfigDTO dto) throws SystemException { logger.info(“账单字段配置保存入参:{}”, JsonMapper.nonEmptyMapper().toJson(dto)); // 必填校验 String enterpriseNo = dto.getEnterpriseNo(); if (StringUtils.isBlank(enterpriseNo)) { throw new SystemException(SettlementCommErrorCode.JS_40000, “enterpriseNo”); } String productNo = dto.getProductNo(); if (StringUtils.isBlank(productNo)) { throw new SystemException(SettlementCommErrorCode.JS_40000, “productNo”); } List fieldConfigBenas = dto.getFieldConfigBenas(); if (CollectionUtils.isEmpty(fieldConfigBenas)) { throw new SystemException(SettlementCommErrorCode.JS_40000, “fieldConfigBenas”); } // 待修改配置 List modifys = new ArrayList<>(fieldConfigBenas.size()); int count = MagicNumberConst.INT1; for (FieldConfigBena vo : fieldConfigBenas) { // 获取对应字段账单配置基础信息 JsZddcZdpzb bean = new JsZddcZdpzb(); bean.setQybh(enterpriseNo); bean.setZgs(dto.getCompany()); bean.setCpbh(productNo); bean.setZdm(vo.getFieldNo()); bean.setZdzwm(vo.getFieldName()); List voList = jsZddcZdpzbServiceImpl.getFieldConfigs(bean); if (CollectionUtil.isEmpty(voList)) { logger.error(CodeUtil.getMessage(SettlementErrorCode.JS_104001)); continue; } JsZddcZdpzb info = voList.get(0); info.setSxh(count++); info.setSfxs(StringUtils.defaultString(vo.getIsDisplay(), info.getSfxs())); info.setDisplayName(StringUtils.defaultString(vo.getDisplayName(), vo.getFieldName())); modifys.add(info); } logger.warn(“待修改字段配置:{}”, JsonMapper.nonEmptyMapper().toJson(modifys)); if (CollectionUtils.isNotEmpty(modifys)) { jsZddcZdpzbServiceImpl.modifyList(modifys); } } }逐行分析
最新发布
07-05
04-03
### Excel ISBLANK 函数 使用说明 #### 1. 基本定义 `ISBLANK` 是 Excel 中的一个逻辑函数,用于检测指定单元格是否为空。如果目标单元格确实为空,则该函数返回 `TRUE`;否则返回 `FALSE`。 #### 2. 函数语法 `ISBLANK(value)` 其中参数 `value` 表示要测试的目标单元格或值[^1]。 #### 3. 返回值描述 当目标单元格没有任何数据(即完全空白),则返回 `TRUE`。需要注意的是,即使单元格看起来像是“空”的情况也可能不被识别为真正意义上的“空”。例如: - 如果单元格仅包含一个不可见字符或者空字符串 (`""`),它不会被认为是真正的空单元格。 - 单元格中存在零长度字符串或其他特殊符号时,可能会影响结果判定[^2]。 #### 4. 实际应用案例分析 下面通过几个具体例子来展示如何正确运用此功能: ##### 示例一:基本用法 假设 A1 单元格处于未输入任何内容的状态下, ```excel =ISBLANK(A1) ``` 上述公式会显示 TRUE,因为此时 A1 的确是一个空白状态。 ##### 示例二:与其他条件组合使用 有时我们希望在某些特定条件下执行操作,比如只有当某个字段为空时才触发警告消息。“IF”语句可以很好地配合 “ISBLANK” 来实现这样的需求。如下所示: ```excel =IF(ISBLANK(B2),"Please enter a value","Value exists") ``` 这里的意思是说,如果 B2 单元格为空,则提示用户填写信息;反之给出已存在的确认通知。 #### 5. 注意事项 尽管 `ISBLANK` 提供了一种简单的方法去验证单元格的内容状况,但在实际工作中可能会遇到一些特殊情况使得其表现不如预期那样直观。正如前面提到过的,对于那些看似无内容但实际上含有隐藏字符的情况,单纯依靠这个方法并不能得到理想的结果。因此,在设计更复杂的校验机制时需格外小心考虑这些潜在因素的影响。 ```python # Python模拟Excel ISBLANK行为的例子 def is_blank(cell_value): if cell_value == None or str(cell_value).strip() == "": return True else: return False print(is_blank("")) # 输出True print(is_blank(" ")) # 输出False (因为空白符不算严格意义下的'空') print(is_blank(None)) # 输出True ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值