c - 我们应该使用宏、内联函数还是只使用普通函数并信任编译器?

标签 c optimization macros inline-functions

将以下函数定义为宏函数或内联 函数会更好吗?还是使用普通函数并信任编译器更好,以保持(在我看来)更好的可读性?

typedef unsigned char byte;

void set_size_mark(byte size_mark, byte *ptr)
{
    *ptr += size_mark << 1;
}

byte get_size_mark(byte *ptr)
{
    return *ptr >> 1;
}

最佳答案

你应该内联那些。无论如何,编译器几乎肯定会自己执行此操作。

代码是一行,不太可能造成代码膨胀,因此内联可能更有效。编译器知道这一点,但是,如果这是不正确的,我认为编译器可以忽略 inline 关键字。

一般来说,您应该避免使用宏 - 它们会导致许多意想不到的问题,并且通常与内联函数一样糟糕,而且更难使用。宏有用途,但这绝对不是一个合适的地方。

关于c - 我们应该使用宏、内联函数还是只使用普通函数并信任编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27080428/

相关文章:

macros - 如何将 julia 字符串宏与变量一起使用?

c++ - 为 libclang 全局设置 -D 宏编译器标志

c# - 从 C# 到 C 的手动代码迁移问题

mysql - 优化 SQL 查询

java - 如何在 java apache 数学中使用 SimplexSolver 或 SimplexOptimizer?

algorithm - 查找排序向量的更快版本 (MATLAB)

c - 为什么“while(!feof(file))”总是错误的?

c - 将文件范围变量放入结构中?有什么好处

c - 如何知道编译时是否定义了宏?

scala - 嵌套宏调用是否安全?