小编dpi*_*dpi的帖子

是否应该在调用内联函数之前定义它?

C语言允许在一次通过中读取源文件而无需向前看; 在任何时候,编译器只需要考虑在文件中当前位置之前出现的声明,原型,宏定义等.

这是否意味着对于要内联的函数调用,编译器可能需要在调用之前定义函数?例如:

int foo(void);
int bar(void) { return foo(); }
inline int foo(void) { return 42; }
Run Code Online (Sandbox Code Playgroud)

foo如果内联定义在定义的前面移动,是否更有可能内联调用bar

我应该在我的代码中安排内联定义,以便它们出现在应该最好内联的调用之前吗?或者我可以假设任何高级足以进行内联的优化编译器都能够找到定义,即使它出现在调用之后(这似乎是gcc的情况)?

编辑:我注意到在Pelles C中,/Ob1选项确实需要在内联调用之前显示定义.编译器还提供了一个/Ob2删除此限制的选项(并且还允许编译器在没有内联说明符的情况下内联函数,类似于gcc所做的那样),但是文档声明使用第二个选项可能需要更多内存.

c optimization inline

6
推荐指数
1
解决办法
780
查看次数

在通用选择中处理 size_t

是否可以定义一个支持所有标准(无符号)整数类型的泛型宏,以及size_t

foo((size_t)42)只要size_t引用标准的无符号整数类型之一,就可以使用下面的示例。但是标准是否保证在任何情况下都是这种情况,或者也size_t可以指代扩展整数类型?

void foo_bool(_Bool x);
void foo_uchar(unsigned char x);
void foo_ushort(unsigned short x);
void foo_uint(unsigned x);
void foo_ulong(unsigned long x);
void foo_ullong(unsigned long long x);

#define foo(x) _Generic((x), \
    _Bool: foo_bool, \
    unsigned char: foo_uchar, \
    unsigned short: foo_ushort, \
    unsigned: foo_uint, \
    unsigned long: foo_ulong, \
    unsigned long long: foo_ullong)(x)

Run Code Online (Sandbox Code Playgroud)

c size-t c11

5
推荐指数
1
解决办法
140
查看次数

标签 统计

c ×2

c11 ×1

inline ×1

optimization ×1

size-t ×1