C语言中用同一标识符声明字符数组与数值数组的含义及实现
结论
两种写法都不符合作业要求,第二种存在语法错误完全不可用。
错误原因说明
- 第二种写法:C语言语法明确规定同一作用域内不允许出现重名的变量定义,你同时定义
char arr[SIZE]和int arr[SIZE]属于典型的重定义错误,编译阶段会直接报错,无法生成可执行文件。 - 第一种写法没有语法错误,但使用了
symbols和numbers两个不同的标识符声明数组,不符合作业要求的「使用同一标识符声明两种数组」的规则。
正确实现思路
作业要求的「同一标识符」需要配合指定的条件编译规则实现,通过编译宏开关控制同一个标识符对应的数组类型,编译时只会生成其中一种数组,不会触发重定义问题,参考实现如下:
#define SIZE 100 // 编译开关:赋值为1时声明数值数组,赋值为0时声明字符数组 #define USE_INT_ARRAY 1 #if USE_INT_ARRAY int arr[SIZE]; #else char arr[SIZE]; #endif
后续的功能逻辑也可以配合条件编译拆分:
- 当
USE_INT_ARRAY为1时,实现数值数组的数字重复次数统计逻辑即可 - 当
USE_INT_ARRAY为0时,实现字符数组按编码匹配位置和取值的逻辑即可
内容的提问来源于stack exchange,提问作者xxx
相关产品推荐
相关产品推荐

