是否可以在C中设置默认参数的值?例如:
void display(int a, int b=10){ //do something } main(){ display(1); display(1,2); // override default value }
Visual Studio 2008,投诉-void display(int a,int B=10)中有语法错误。如果这在C中是不法律的的,有什么替代方法?请让我知道。谢谢。
dgtucam11#
默认参数是C++的一项功能。C没有默认参数。
sulc1iza2#
这在标准C中是不可能的。一种替代方法是将参数编码到函数名中,例如:
void display(int a){ display_with_b(a, 10); } void display_with_b(int a, int b){ //do something }
kd3sttzy3#
C中没有默认参数。一种方法是传入NULL指针,如果传递了NULL,则将指针值设置为默认值。但这很危险,所以我不推荐这样做,除非你真的需要默认参数。范例
function ( char *path) { FILE *outHandle; if (path==NULL){ outHandle=fopen("DummyFile","w"); }else { outHandle=fopen(path,"w"); } }
rnmwe5a24#
不是那边...你可以使用一个int数组或者一个varargs来填充函数中缺少的数据,但是会丢失编译时检查。
gz5pxeao5#
如果您使用的是与C++2a兼容的编译器,则可以使用一个预处理器技巧,如https://stackoverflow.com/a/10841376/18166707中所述您可以使用以下代码片段作为示例:
#include <stdio.h> #define ADD_THREE(a,b,...) add_three_nums(a, b, (0, ##__VA_ARGS__)) int add_three_nums( int a, int b, int c) { return a + b + c; } void main( void ) { printf("%d\n", ADD_THREE(3, 5)); printf("%d\n", ADD_THREE(4, 6, 8)); }
5条答案
按热度按时间dgtucam11#
默认参数是C++的一项功能。
C没有默认参数。
sulc1iza2#
这在标准C中是不可能的。一种替代方法是将参数编码到函数名中,例如:
kd3sttzy3#
C中没有默认参数。
一种方法是传入NULL指针,如果传递了NULL,则将指针值设置为默认值。但这很危险,所以我不推荐这样做,除非你真的需要默认参数。
范例
rnmwe5a24#
不是那边...
你可以使用一个int数组或者一个varargs来填充函数中缺少的数据,但是会丢失编译时检查。
gz5pxeao5#
如果您使用的是与C++2a兼容的编译器,则可以使用一个预处理器技巧,如https://stackoverflow.com/a/10841376/18166707中所述
您可以使用以下代码片段作为示例: