(void)strcpy(somevariable1,somevariable2)正确吗?
我正在学习编程。我想知道上述用法是否正确。这是正确的吗(void)strcpy(somevariable1,somevariable2)正确吗?,c,function,syntax,C,Function,Syntax,我正在学习编程。我想知道上述用法是否正确。这是正确的吗 (void)strcpy(somevariable1, somevariable2); 这与类型转换有关吗?是的,这是正确的,但您在这里并没有真正转换任何内容。您只是明确地告诉编译器要删除strcpy()的返回值,而它不应该警告您不要检查返回值(因为这样做通常是个好主意)。这是一个类型转换,但不需要void是一个不完整的类型,不用于建模(或者,作为指向void的指针,泛型数据) 将函数的返回值强制转换为void的原因只是文档:它明确表示您
(void)strcpy(somevariable1, somevariable2);
这与类型转换有关吗?是的,这是正确的,但您在这里并没有真正转换任何内容。您只是明确地告诉编译器要删除strcpy()的返回值,而它不应该警告您不要检查返回值(因为这样做通常是个好主意)。这是一个类型转换,但不需要
void
是一个不完整的类型,不用于建模(或者,作为指向void
的指针,泛型数据)
将函数的返回值强制转换为void的原因只是文档:它明确表示您将不使用返回值。如果省略强制转换,编译器的某些激进警告设置可能会发出有关未使用的返回值的警告。
strcpy
具有以下语法:
char * strcpy ( char * destination, const char * source );
然后返回目的地
,它是指向char的指针。当您显式地将返回值强制转换为(void)
,基本上就是这样做的
(void)(char*)
您将返回值强制转换为零,或者干脆将其丢弃。这有助于抑制某些编译器警告,尤其是在不使用返回值时 此表达式有效
使用(void)
强制转换表达式是一种明确声明要丢弃表达式语句的值(例如函数调用的结果)的方法
本手册第6.8.3节中有一个例子:
4示例1如果函数调用仅因其副作用而作为表达式语句计算,则可能会丢弃其值
通过将表达式转换为空表达式,使其显式化
铸造方法:
int p(int);
/* ... */
(void)p(0);
这可能是为了抑制未使用的返回值警告。您想知道什么是正确的用法吗?演员?参数?分号?您无法确定这一行是否正确。这取决于somevariable1和somevariable2是什么,以及它们的内容是什么。OP询问这个令人惊讶的演员阵容的目的,一个清晰的解释也会帮助其他人。我认为,编译器抱怨没有使用strcpy()
的返回值是相当愚蠢的,即使使用了最迂腐的警告设置。