在C中的位置MIN和MAX定义,如果有的话?
实现这些的最佳方式是什么,尽可能通用和安全?(首选编译器扩展/内置主流编译器.)
null语句的典型用法是什么
;
Run Code Online (Sandbox Code Playgroud)
在C?
我知道它基本上用于跳过编译器所期望的表达式,但是在这里我只对这种用例的实际例子感兴趣.
FUNC(param);
Run Code Online (Sandbox Code Playgroud)
如果param是char *,派遣func_string.
什么时候int发送到func_int
我认为可能有一个解决方案,因为变量类型在编译时是已知的.
我正在阅读这篇文章http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/,第一段代码就是这个,显然是从linux内核中获取的:
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
Run Code Online (Sandbox Code Playgroud)
现在为什么他们需要这(void) (&_min1 == &_min2);条线?
是否有任何gcc标志禁止隐式"bool - > int"转换?
我想用这段代码得到任何警告:
void function( int value, bool flag ) { }
int main()
{
int a = 123;
bool flag = true;
//oops, a common mistake
function( flag, a );
}
Run Code Online (Sandbox Code Playgroud) 分功能的实现在这里做的:
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
Run Code Online (Sandbox Code Playgroud)
第四行有什么意义?
为什么这样做(void) (&_min1 == &_min2); ?
我正在查看Linux内核源代码(kernel.h),我发现了这个min函数的宏:
#ifndef max
#define max(x, y) ({ \
typeof(x) _max1 = (x); \
typeof(y) _max2 = (y); \
(void) (&_max1 == &_max2); \
_max1 > _max2 ? _max1 : _max2; })
#endif
Run Code Online (Sandbox Code Playgroud)
现在我想知道(void) (&_max1 == &_max2);line 有什么作用?
要在内核 v4.19-rc5 中初始化自旋锁,必须使用spin_lock_init如下定义的宏:
#define spin_lock_init(_lock) \
do { \
spinlock_check(_lock); \
raw_spin_lock_init(&(_lock)->rlock); \
} while (0)
Run Code Online (Sandbox Code Playgroud)
该函数spinlock_check(_lock)只是返回&lock->rlock。本文解释说:
spinlock_check 的实现非常简单,这个函数只是返回给定自旋锁的 raw_spinlock_t 以确保我们得到完全正常的原始自旋锁我不明白这个函数如何执行检查。我期待
ifcckeck 函数中的一些语句。抱歉,我是内核编程新手。