可以保留未使用的参数吗?我正在尝试像这样运行函数:
void encoder();
void encoder(int argc, FILE* inputFP, FILE* outputFP);
是否需要secound函数,一个用于处理stdio,另一个用于处理文件?当我尝试跑步void encoder(int argc, FILE* inputFP, FILE* outputFP);
没有任何参数,我会收到错误:
error: too few arguments to function ‘void encoder(int, FILE*, FILE*)’
encoder();```
可以在C函数中使用未使用的参数吗?
是
仍然,为什么不让encoder()
取两个FILE*
而不是名称,然后做(伪代码):
main(argc, argv)
FILE * fp_in, * fp_out
if argc == 2
fp_in = open argv[1], "r"
else
f = stdin
if argc == 3
fp_out = open argv[3], "w"
else
fp_out = stdout
encoder fp_in, fp_out
要回答标题中的一般问题-是的,可以使用不传递给函数的所有参数,尽管这可能会使将来的维护者感到困惑。
对于这种特定情况,建议不要在输入和输出文件中使用特殊名称来表示标准流,而不是传递参数计数。 * nix命令行实用程序之间的通用约定是使用"-"
指定从标准输入中读取的内容:
xmllint --format some_ugly_wad_of_xml | vi -
上面的命令漂亮地打印了一些XML,然后将漂亮的版本传递给vi进行编辑(这是我最近要做的很多事情)。因此,不用传递argc
,只需传递文件名并检查它们以确定执行的操作:
if ( !strcmp( inputFile, "-" ) )
inputStream = stdin;
else
inputStream = fopen( inputFile, "r" );
这样,您不会将任何参数都保留为“未使用”。
最好打开文件并读取所有内容并获取变量。因此,您可以释放(关闭)文件并跳舞。关闭文件后,随意创建东西。