(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()
的返回值是相当愚蠢的,即使使用了最迂腐的警告设置。