Tag: 函数重载

GCC:允许C99中的重载function

我在C99中编写代码并通过GCC编译。 我想使用函数重载的风格原因(否则我必须自己做名称修改)。 我读过有没有理由说C99不支持函数重载? 但是,我仍然想知道它是否可以在GCC中启用。 你能帮助我吗?

c11 _Generic添加类型

如何为c11 _Generic Functions添加额外的类型? 你需要#undef / re- #define吗?(如果有以下工作的话)或者有更好的方法吗? #define to_str(X) _Generic((X), \ long double: ld_str, \ double: d_str, \ float: f_str, \ )(X) #undef to_str #define to_str(X) _Generic((X), \ long double: ld_str, \ double: d_str, \ float: f_str, \ int: i_str, \ )(X)

具有外部“C”链接的过载分辨率

在混合C / C ++项目中,我们需要从C调用C ++函数。 要调用的函数作为三个单独的函数被重载,但是我们可以忽略C语言中的那个,我们只选择最合适的函数并坚持使用那个函数。 有两种方法可以做到这一点:(1)编写一个带有extern“C”函数的小型C ++包装器,它将调用转发给选定的重载函数,或者(2)只是声明我们想要调用的函数的hackish方式C为外部“C”。 问题是,第二种变体是否有任何缺点(除了恶梦和恶业)? 换句话说,给定三个重载函数,其中一个被声明为exern“C”,我们应该期待C ++方面的问题,还是根据标准很好地定义?

有没有理由说C99不支持函数重载?

显然(至少根据gcc -std=c99 )C99不支持函数重载。 在C中不支持某些新function的原因通常是向后兼容,但在这种情况下,我无法想到函数重载会破坏向后兼容性的单一情况。 不包括这个基本function的原因是什么?

为什么这种C语言中的函数重载方法有效?

我已经查看过用C语言做的一些方法,但我只找到了C99。 但是我遇到了以下解决方案,取自Lock Less 。 问题是,我不太明白它是如何工作的,并且想知道那里发生的事情的基本原理,以便能够更清楚地理解它。 我已经上网了一段时间,发现这个关于__VA_ARGS__ ,但不幸的是,仅此一点还不够。 我真的很感激有关此问题的解释或指导,任何forms的参考都会有所帮助。 我用GCC-5.4.1和-ansi标志编译了这段代码。 #include #include #include #define COUNT_PARMS2(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _, …) _ #define COUNT_PARMS(…)\ COUNT_PARMS2(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) void count_overload1(int p1) { printf(“One param: %d\n”, p1); } void count_overload2(double *p1, const char *p2) { […]

C中的函数重载

今天,看一下open()的手册页,我注意到这个函数”overloaded’: int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 我不认为这是可能的C.实现这一目标的“诀窍”是什么? 后期编辑: 所以它并没有真正超载,因为在使用varargs时 – 你只能提供相同类型的多个参数。 那么, mode_t幕后是一个int吗?