偶尔编写一下根本不会发出警告的C++代码是很困难的.然而,启用警告是一个好主意.因此,通常需要禁用某些特定构造周围的警告,并在所有其他代码段中启用它们.
到目前为止,我已经看到了两种方法.
第一个是使用#pragma warning( push )和#pragma warning( pop ):
#pragma warning( push )
#pragma warning( disable: ThatWarning )
//code with ThatWarning here
#pragma warning( pop )
Run Code Online (Sandbox Code Playgroud)
第二是使用#pragma warning( default ):
#pragma warning( disable: ThatWarning )
//code with ThatWarning here
#pragma warning( default: ThatWarning )
Run Code Online (Sandbox Code Playgroud)
我在第二个变体中看到的问题是它丢弃了原始警告级别 - 警告可能在此之前已关闭或警告级别可能已被更改.使用default会丢弃这些改动.
第一种方法看起来很干净.它有什么问题吗?有没有更好的方法来实现同样的目标?
我正在为 Linux 内核编写一个模块,我想int在文件私有数据中存储一个值。
本质上,我所做的是:file->private_data = (void*) x
其中 x 是某个int值。
现在,我想将 int 作为值访问回来。
使用在编译过程中int val = (int) file->private_data会发出cast from pointer to integer of different size警告,这是合理的,因为它可能会在 64 位系统上引起问题。
我也无法使用uintptr_t,因为我在内核中工作并且无权访问库。
使用起来double似乎不太合适。
我的问题是:这样做的最佳做法应该是什么?