Tag: 重载

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

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

在其参数的结构上重载C / C ++预处理器宏

我想编写一个预处理器宏,如果它的参数是带括号的标记元组,它会做一件事,如下所示: MY_MACRO((x, y)) 如果它只是一个令牌,还有其他东西,如下所示: MY_MACRO(x) 那可能吗? 如何区分空格分隔的标记数,即MY_MACRO(x)和MY_MACRO(xy) ? 请注意,我不是试图根据参数的数量重载 – 在所有情况下它都是一元宏。 编辑 :如果他们帮助我愿意使用可变参数宏

是如何实现的?

C(据我所知)没有重载或模板,对吧? 那么如何在普通的’C’中存在一组具有相同名称的类型无关的函数? 通常的编译时欺骗会涉及一大堆宏,不是吗?

特定的Cfunction如何工作?

我正在努力学习C并且我已经非常困惑了。 在我使用的OOP语言中,存在执行方法重载的能力,其中相同的函数可以具有不同的参数类型并且调用哪个是最合适的。 现在在C中我知道情况并非如此,所以我无法弄清楚以下问题,printf()如何工作。 例如: char chVar = ‘A’; int intVar = 123; float flVar = 99.999; printf(“%c – %i – %f \n”,chVar, intVar, flVar); printf(“%i – %f – %c \n”,intVar, flVar, chVar); printf(“%f – %c – %i \n”,flVar, chVar, intVar); 现在因为C不支持函数重载,printf如何设法获取任何类型的任意数量的参数,然后正确地使用它们? 我试图通过下载glibc源程序包找到printf()工作,但似乎很容易找到它,虽然我会继续寻找。 这里的任何人都可以解释C如何执行上述任务吗?

是否有可能在C中重载运算符?

是否有可能在C中重载运算符(如比较运算符)? 如果是这样,你怎么做? 我做了一个快速搜索,但我找到的只是用于C ++,我想要的是C语言。 有人有主意吗? Edit1:我的想法是:我有一个结构,我需要做一个比较(基于结构的一个成员)。 为此,我想将运营商与我的新“数据类型”相关联。 编辑2:我完全知道我可以不使用运算符重载,但想知道你是否可以使用OVERLOAD执行此操作。 答案:重载的概念与面向对象的编程有关。 由于C不是面向对象的,因此不能包含过载的概念。 (:

重载C宏

有没有更好的方法来“重载”像这样的宏? 我需要一个接受各种参数的宏。 #define DEBUG_TRACE_1(p1) std::string p[] = {p1}; log _log(__FUNCTION__, p, 1) #define DEBUG_TRACE_2(p1, p2) std::string p[] = {p1, p2}; log _log(__FUNCTION__, p, 2) #define DEBUG_TRACE_3(p1, p2, p3) std::string p[] = {p1, p2, p3}; log _log(__FUNCTION__, p, 3) #define DEBUG_TRACE_4(p1, p2, p3, p4) std::string p[] = {p1, p2, p3, p4}; log _log(__FUNCTION__, p, 4) #define […]

C语言中参数的默认值和C中的函数重载

将C ++库转换为ANSI C,似乎ANSI C不支持函数变量的默认值,或者我错了? 我想要的是类似的东西 int funcName(int foo, bar* = NULL); 另外,ANSI C中的函数重载是否可行? 需要 const char* foo_property(foo_t* /* this */, int /* property_number*/); const char* foo_property(foo_t* /* this */, const char* /* key */, int /* iter */); 当然可以用不同的方式命名它们但是习惯于C ++我曾经用于函数重载。