比较字符串时返回 1 时出错
Error returning 1 when comparing strings
任何人都可以告诉我为什么 Visual Studio 在我尝试使用我的 define ERROR 宏尝试 return 1 时给我一个错误吗? VS 说它期待一个括号:/
#define ERROR "A generic error has occured";
const char *RetAdapters(int *adapters) {
if(...) {}
else
return ERROR;
}
int main()
{
const char *ret = RetAdapters(&input);
if (strcmp(*ret, ERROR) == 0) {
return 1;
}
return 0;
}
ERROR
的定义包含尾随 ;
,当 ERROR
在 if (strcmp(*ret, ERROR) == 0) {
中扩展时会导致语法错误
从宏定义中删除 ;
并删除间接 *
:
#define ERROR "A generic error has occurred"
const char *RetAdapters(int *adapters) {
if (...) {
...
} else {
return ERROR;
}
}
int main() {
const char *ret = RetAdapters(&input);
if (strcmp(ret, ERROR) == 0) {
return 1;
}
return 0;
}
但是请注意,不推荐这种编程风格:
ERROR
可以定义为全局变量:
const char ERROR[] = "A generic error has occurred";
RetAdapters()
可能 return 错误状态,不同于 0
和 return 0
成功。这是大多数系统调用在 unix 系统上报告成功和失败的方式,这也是 main()
应该向系统报告成功操作的方式。
您必须从宏声明中删除 ;
并且在你的 strcmp 中删除 *
因为你传递的是一个字符作为参数
参见:https://en.wikipedia.org/wiki/Dereference_operator
有关此的更多信息;)
在我看来,现代 C/C++ 代码应该像这里一样定义字符串常量(同意,标识符应该按照常见的 C 规则转换为小写。f.e。Error_msg
)
const char ERROR[]= "A generic error has occured";
编译器以类型安全的方式顺利控制下一个问题
const char *RetAdapters(int *adapters) {
if(...) {}
else
return ERROR;
}
和
if (strcmp(ret, ERROR) == 0) { ...
更新:关于复制、比较 C 字符串(等)几乎不存在哲学问题,但我假设题外话。
任何人都可以告诉我为什么 Visual Studio 在我尝试使用我的 define ERROR 宏尝试 return 1 时给我一个错误吗? VS 说它期待一个括号:/
#define ERROR "A generic error has occured";
const char *RetAdapters(int *adapters) {
if(...) {}
else
return ERROR;
}
int main()
{
const char *ret = RetAdapters(&input);
if (strcmp(*ret, ERROR) == 0) {
return 1;
}
return 0;
}
ERROR
的定义包含尾随 ;
,当 ERROR
在 if (strcmp(*ret, ERROR) == 0) {
从宏定义中删除 ;
并删除间接 *
:
#define ERROR "A generic error has occurred"
const char *RetAdapters(int *adapters) {
if (...) {
...
} else {
return ERROR;
}
}
int main() {
const char *ret = RetAdapters(&input);
if (strcmp(ret, ERROR) == 0) {
return 1;
}
return 0;
}
但是请注意,不推荐这种编程风格:
ERROR
可以定义为全局变量:const char ERROR[] = "A generic error has occurred";
RetAdapters()
可能 return 错误状态,不同于0
和 return0
成功。这是大多数系统调用在 unix 系统上报告成功和失败的方式,这也是main()
应该向系统报告成功操作的方式。
您必须从宏声明中删除 ;
并且在你的 strcmp 中删除 *
因为你传递的是一个字符作为参数
参见:https://en.wikipedia.org/wiki/Dereference_operator 有关此的更多信息;)
在我看来,现代 C/C++ 代码应该像这里一样定义字符串常量(同意,标识符应该按照常见的 C 规则转换为小写。f.e。Error_msg
)
const char ERROR[]= "A generic error has occured";
编译器以类型安全的方式顺利控制下一个问题
const char *RetAdapters(int *adapters) {
if(...) {}
else
return ERROR;
}
和
if (strcmp(ret, ERROR) == 0) { ...
更新:关于复制、比较 C 字符串(等)几乎不存在哲学问题,但我假设题外话。