可以在C函数中使用未使用的参数吗? [处于保留状态]

问题描述 投票:0回答:3

可以保留未使用的参数吗?我正在尝试像这样运行函数:

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
3个回答
1
投票

可以在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

1
投票

要回答标题中的一般问题-是的,可以使用不传递给函数的所有参数,尽管这可能会使将来的维护者感到困惑。

对于这种特定情况,建议不要在输入和输出文件中使用特殊名称来表示标准流,而不是传递参数计数。 * nix命令行实用程序之间的通用约定是使用"-"指定从标准输入中读取的内容:

xmllint --format some_ugly_wad_of_xml | vi -

上面的命令漂亮地打印了一些XML,然后将漂亮的版本传递给vi进行编辑(这是我最近要做的很多事情)。因此,不用传递argc,只需传递文件名并检查它们以确定执行的操作:

if ( !strcmp( inputFile, "-" ) )
  inputStream = stdin;
else
  inputStream = fopen( inputFile, "r" );

这样,您不会将任何参数都保留为“未使用”。


0
投票

最好打开文件并读取所有内容并获取变量。因此,您可以释放(关闭)文件并跳舞。关闭文件后,随意创建东西。

© www.soinside.com 2019 - 2024. All rights reserved.