有没有办法在C中实现函数重载?我正在寻找简单的函数来重载像
foo (int a)
foo (char b)
foo (float c , int d)
Run Code Online (Sandbox Code Playgroud)
我认为没有直接的方式; 我正在寻找解决方法,如果存在的话.
我希望clang将我的C/C++代码编译为LLVM字节码而不是二进制可执行文件.我怎样才能做到这一点?如果我得到LLVM字节码,我怎么能把它进一步编译成二进制可执行文件.
基本上我想LLVM在编译成二进制可执行文件之前将一些自己的代码添加到字节码中.
我使用Curiously Recurring模板模式了解静态多态的机制.我只是不明白它有什么好处.
声明的动机是:
我们牺牲了动态多态性的一些灵活性来提高速度.
但是,为什么东西打扰这么复杂,如:
template <class Derived>
class Base
{
public:
void interface()
{
// ...
static_cast<Derived*>(this)->implementation();
// ...
}
};
class Derived : Base<Derived>
{
private:
void implementation();
};
Run Code Online (Sandbox Code Playgroud)
当你可以做的时候:
class Base
{
public:
void interface();
}
class Derived : public Base
{
public:
void interface();
}
Run Code Online (Sandbox Code Playgroud)
我最好的猜测是代码中没有语义差异,这只是一个好的C++风格问题.
Herb Sutter写道Exceptional C++ style: Chapter 18:
更喜欢将虚拟功能设为私有.
当然伴随着彻底解释为什么这是好风格.
在本指南的上下文中,第一个例子是好的,因为:
void implementation()示例中的函数可以假装是虚拟的,因为它是在这里执行类的自定义.因此它应该是私人的.
第二个例子很糟糕,因为:
我们不应该干涉公共接口来执行自定义. …
我正在使用为arm-eabi编译的GCC/G ++开发嵌入式应用程序.由于资源限制,我试图禁用标准C++异常处理.我正在使用"-fno-exceptions -nostartfiles -ffreestanding"编译代码.
当一个类的全局实例存在,并且该类包含另一个类的实例作为成员时,则链接了许多异常处理代码.这不会那么糟糕,除了它还带来了很多stdio的东西,比如printf,fopen,fclose和其他FILE函数.此应用程序没有文件系统,即使这样做,这些功能也会浪费太多代码空间.
我理解即使使用-fno-exceptions,G ++链接在使用异常的operator new中,因为库没有非异常使用的operator new(new(nothrow)除外).我为operator new和delete创建了替换,它们被链接到输出以及不需要的标准库函数.
令我困惑的是,我不会在任何地方打电话给新人.只有当一个全局对象包含另一个对象时才会链接所有这些代码.
例如:
class UartA {
...
private:
Ringbuffer* rxbuf;
};
class UartB {
...
private:
Ringbuffer rxbuf;
};
Run Code Online (Sandbox Code Playgroud)
如果创建了UartA的全局实例,则不会链接异常处理,operator new和stdio内容.这就是我想要的.
如果创建了UartB的全局实例(其中rxbuf是实例而不是指针),则链接不需要的代码.
UartA和UartB都不使用operator new,exception或stdio.它们的区别仅在于rxbuf的类型.
你能建议如何防止链接额外的代码吗?另外,为什么这与UartB相关联,而不是UartA?
有没有办法将llvm IR转换为c代码并保持其语义?例如,我们可以先将c代码编译为llvm IR,然后将其编译回另一段c代码.我不希望这两个文件是一样的.但他们需要具有相同的功能.谢谢
我正在寻找某种尽可能简约C但具有内置类支持的 C 方言。C因此,我可以(并鼓励)使用宏、指向数组的指针和手动内存管理,还可以创建类、向它们添加字段和成员函数等。当我尝试在andtypedef struct和函数指针中实现某种 OOP 时,出现了这个问题与我想要的类似,但是“成员函数”需要手动将指向对象的指针作为参数传递给它们,而这不是我想要做的。C++我知道我可以像“带有类的 C”一样写,但是我C++会鼓励不同的编程风格,我很好奇是否有一些东西正是我想要的。
我正在搜索“带有类的 C”,但我只C++在结果中看到,所以我希望答案是“只使用 C++”,我对此表示同意,但我只是好奇。
我想在C中使用多态进行一些面向对象的样式编程,其中我的接口类包含一个指向函数表的指针.例如:
/* Implement polymorphism in C, Linux kernel-style */
struct statement {
const struct statement_ops *ops;
struct list_head list; /* when on master input list */
void *private; /* pointer to type-specific data */
};
struct statement_ops {
int (*analyse)(void *private, int pc);
int (*get_binary_size)(void *private);
};
void user(void)
{
struct statement *s = make_a_statement();
if (s->ops->analyse(s->private, foo))
blah blah;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在没有明确地将s-> private传递给每个"方法"的情况下编写内容.有任何想法吗?一些宏观技巧可能吗?
c ×4
c++ ×2
llvm ×2
oop ×2
clang ×1
class ×1
coding-style ×1
dialect ×1
exception ×1
g++ ×1
gcc ×1
overloading ×1
polymorphism ×1