C 捕获传递给函数且没有参数的变量

C 捕获传递给函数且没有参数的变量,c,C,我不知道这是否可能,但维基百科的文章说: 在C语言中,一种没有参数的函数原型,例如intfoo(),, 表示参数未指定。因此,这是合法的 使用一个或多个参数调用这样的函数,例如foo(42,“hello “世界”) 相反,C++中没有参数的函数原型 意味着函数不接受参数,并且调用 带参数的函数格式不正确 在C中,正确的方法是 使用void声明不带参数的函数,如中所示 intfoo(无效) 我编写了以下代码来测试它,并捕获传递的变量(这不太正常) #包括 #包括 void foo(); int m

我不知道这是否可能,但维基百科的文章说:

在C语言中,一种没有参数的函数原型,例如
intfoo(),,
表示参数未指定。因此,这是合法的
使用一个或多个参数调用这样的函数,例如
foo(42,“hello
“世界”)

相反,C++中没有参数的函数原型 意味着函数不接受参数,并且调用 带参数的函数格式不正确

在C中,正确的方法是 使用
void
声明不带参数的函数,如中所示
intfoo(无效)

我编写了以下代码来测试它,并捕获传递的变量(这不太正常)

#包括
#包括
void foo();
int main()
{
int i=3;
富(i),;
返回0;
}
void foo()
{
//va_列表参数;
//va_启动(args);
//
//int x=va_arg(args,int);
//printf(“%d”,x);
//va_端(args);
}

有没有可能捕捉到传递的
i
,或者Wikipedia谈论的是完全不同的东西?

如果您阅读文档,您会发现它需要参数列表中的最后一个“真实”参数。因此,如果不声明任何参数,在普通C中不可能获取参数


您可以做的是声明没有参数的函数原型,并且在实际定义中有参数。

您可以使用任何参数调用函数,但不能在函数范围中访问它们。无论如何,如果您不将原型声明为
intfoo(void),一些编译器会给您警告因为您可能无论如何都不想这样做。

您不能这样做,至少在标准C中不行。Wikipedia文章的意思是这样的代码:

void foo();

int main()
{
    int i = 3;
    foo(i);
    return 0;
}

void foo(int i)
{
    (void)i;
}

编译C中的细,但在C++中无效,因为参数的数目不匹配。

< P>这是从C语言的严谨的旧C天开始的,很好,很轻松。 基本思想是,如果在翻译单元中有一个函数,比如说
foo.c

float foo(int x) 
{
     return 2.0F * x;
}
然后您想在另一个翻译单元中使用它,比如说
main.c
,但您不想费心编写头文件,您可以执行以下操作:

int main()
{
    float foo();
    float r;
    r = foo(42);
}
您不必编写函数的参数。公平地说,您根本不需要编写原型,但是编译器会假设函数总是返回
int
,这可能不是您所需要的


然后,随着语言的成熟,这种函数声明被认为是一个非常糟糕的主意,所以一般来说,您不应该(尝试)使用它。如果你想要一个变分函数,那么一定要使用它,但要声明它是这样的。你必须至少给它一个真正的参数,来锚定对
va_start()

的调用在C程序中有一种访问这些参数的方法,但我认为这是一个大问题,应该避免

下一个示例显示如何访问int参数:

#include<stdio.h>
#include<stdarg.h>

void foo();

int main()
{
    int i = 3;
    foo(i);
    return 0;
}

void foo(int p)
{
    printf("%d",p);
}
#包括
#包括
void foo();
int main()
{
int i=3;
富(i),;
返回0;
}
无效foo(int p)
{
printf(“%d”,p);
}
现在,我不确定如果传递的是其他内容,然后是int(例如char*),会发生什么,但它可能会导致未定义的行为


<>在C++中(如所说),不能将参数传递给没有参数的函数。< / P>是的,我想没有办法访问它们,我故意省略了<代码> VAYSTART中的参数,因为这会挫败目的:非常感谢。我想这就是我要找的。
#include<stdio.h>
#include<stdarg.h>

void foo();

int main()
{
    int i = 3;
    foo(i);
    return 0;
}

void foo(int p)
{
    printf("%d",p);
}