相关疑难解决方法(0)

是否正确使用#pragma warning push/pop来暂时改变警告级别?

偶尔编写一下根本不会发出警告的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会丢弃这些改动.

第一种方法看起来很干净.它有什么问题吗?有没有更好的方法来实现同样的目标?

c++ warnings pragma compiler-warnings visual-c++

70
推荐指数
4
解决办法
5万
查看次数

C - 将 void* 转换为 int、内核的最佳实践

我正在为 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似乎不太合适。

我的问题是:这样做的最佳做法应该是什么?

c int casting void-pointers linux-kernel

3
推荐指数
1
解决办法
1891
查看次数