我刚刚遇到某人的C代码,我很困惑为什么要编译.有两点我不明白.
首先,与实际函数定义相比,函数原型没有参数.其次,函数定义中的参数没有类型.
#include <stdio.h>
int func();
int func(param)
{
return param;
}
int main()
{
int bla = func(10);
printf("%d", bla);
}
Run Code Online (Sandbox Code Playgroud)
为什么这样做?我已经在几个编译器中测试过,它运行正常.
有没有办法动态获取函数的函数参数名称?
假设我的函数看起来像这样:
function doSomething(param1, param2, .... paramN){
// fill an array with the parameter name and value
// some other code
}
Run Code Online (Sandbox Code Playgroud)
现在,我如何从函数内部获取参数名称及其值的列表到数组中?
如何使用Python列表(例如params = ['a',3.4,None])作为函数的参数,例如:
def some_func(a_char,a_float,a_something):
# do stuff
Run Code Online (Sandbox Code Playgroud) 我需要一个函数,它接受任意数量的参数(所有相同的类型),对它们做一些事情然后给出一个结果.在我的具体情况下,参数列表是不切实际的.
当我查看haskell库时,我看到函数printf(来自模块Text.Printf)使用了类似的技巧.不幸的是,通过查看来源我无法理解这种魔力.
有人可以解释如何实现这一点,或至少一些网页/纸/任何我可以找到一个良好的描述吗?
动机:
我需要它的原因非常简单.对于学校(计算机科学课),我们需要编写一个能够"记录"数学表达式,将其表示为字符串的模块(通过为自己的数据类型编写Num/Real/etc的实例),并执行对它的各种操作.
此数据类型包含变量的特殊构造函数,可以由值或指定函数的任何值替换.其中一个目标是编写一个函数,它使用一些变量(类型对(Char,Rational))来表达这种表达式并计算表达式的结果.我们应该看看如何最好地表达函数的目标.(我的想法:该函数返回另一个函数,它接受与函数中定义的变量一样多的参数 - 似乎是不可能的).
定义int->int通过引用接收lambda参数的函数的正确方法是什么?
void f(std::function< int(int) >& lambda);
Run Code Online (Sandbox Code Playgroud)
要么
void f(auto& lambda);
Run Code Online (Sandbox Code Playgroud)
我不确定最后一种形式是否是合法的语法.
还有其他方法来定义lambda参数吗?
鉴于以下计划,
#include <iostream>
using namespace std;
void foo( char a[100] )
{
cout << "foo() " << sizeof( a ) << endl;
}
int main()
{
char bar[100] = { 0 };
cout << "main() " << sizeof( bar ) << endl;
foo( bar );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出
main() 100
foo() 4
Run Code Online (Sandbox Code Playgroud)
我有一个函数,它将可选参数作为名称/值对.
function example(varargin)
% Lots of set up stuff
vargs = varargin;
nargs = length(vargs);
names = vargs(1:2:nargs);
values = vargs(2:2:nargs);
validnames = {'foo', 'bar', 'baz'};
for name = names
validatestring(name{:}, validnames);
end
% Do something ...
foo = strmatch('foo', names);
disp(values(foo))
end
example('foo', 1:10, 'bar', 'qwerty')
Run Code Online (Sandbox Code Playgroud)
似乎在提取适当的值时需要付出很多努力(并且它仍然不是特别强大的再次严格指定的输入).有没有更好的方法来处理这些名称/值对?是否有MATLAB附带的辅助函数可以提供帮助?
能否请您指出在JavaScript中跳过可选参数的好方法.
例如,我想抛弃所有opt_参数:
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
Run Code Online (Sandbox Code Playgroud) 在下面的函数定义中,*和/代表什么?
def func(self, param1, param2, /, param3, *, param4, param5):
print(param1, param2, param3, param4, param5)
Run Code Online (Sandbox Code Playgroud)
注意:不要误认为 *args | 中的单|双星号 **kwargs(在这里解决)
python function parameter-passing function-parameter python-3.x
当我浏览cppreference时,我在函数参数中看到了一个奇怪的类型数组,如下所示:
void f(double x[volatile], const double y[volatile]);
Run Code Online (Sandbox Code Playgroud)
那么,volatile关键字出现在数组下标中的目的是什么?它有什么作用?
arrays ×2
c ×2
c++ ×2
function ×2
javascript ×2
python ×2
arguments ×1
c++11 ×1
haskell ×1
lambda ×1
list ×1
matlab ×1
name-value ×1
parameters ×1
polyvariadic ×1
python-3.x ×1
reflection ×1
sizeof ×1
standards ×1
volatile ×1