kap*_*dit 2 c macros pointers lint const
#define MAXSTR "Maximum number reached"
char *str = MAXSTR;
Run Code Online (Sandbox Code Playgroud)
在做这种操作的同时.代码工作正常,但我得到lint错误.我怎么解决它?
Error:
Assignment of string literal to variable
Run Code Online (Sandbox Code Playgroud)
如果我使用:
#define MAXSTR "Maximum number reached"
char *str = (char *) MAXSTR;
Run Code Online (Sandbox Code Playgroud)
然后lint错误:
Attempt to cast away const (or volatile)
Run Code Online (Sandbox Code Playgroud)
宏是给代码片段的名称.名称出现在源文件中的任何位置,都由代码片段替换.宏定义是C预处理器的指令.它们不是声明,而不是它们executed.它们在预处理阶段之后甚至不存在,因此不生成汇编代码.
MAXSTR是一个由字符串文字替换的宏"Maximum number reached".字符串文字是只读的,尝试修改它们是未定义的行为.因此,您应该使指针const合格.
#define MAXSTR "Maximum number reached"
const char *str = MAXSTR; // make the pointer const
Run Code Online (Sandbox Code Playgroud)
将字符串文字赋值给变量
这是一个可怕的错误信息。我很好奇 Lint 认为字符串文字有什么用处,如果我们不能将它们分配给变量......它应该说:“将字符串文字分配给非常量指针”。
尝试抛弃 const(或 volatile)
警告不正确。同样,它应该告诉您指针变量需要是const.
总而言之,您之所以会出现这些错误,是因为您的静态分析器工具不好。
解释:
C 中的字符串文字是字符数组,char []. 不幸的是,它们不被const char[]语言视为常量类型。这是 C 语言中的一个缺陷,因为如果您尝试对字符串文字进行写访问,则会导致未定义的行为,并且程序可能会崩溃和烧毁。因此,您必须将字符串文字视为常量数组,即使它们不是。
因此,始终将指向字符串文字的指针声明为const char*.
在 Lint 的情况下,它似乎将字符串文字视为const char[],而实际上并非如此。因此,它会给您不正确的错误,而不是指出实际问题。
| 归档时间: |
|
| 查看次数: |
17596 次 |
| 最近记录: |