3

我有一个不支持的编译器 (PGI)

#pragma once

但是我想包含的库(推力)使用它们。

有解决此问题的方法吗?

4

2 回答 2

2

您可以使用guardonce#pragma once语句转换为标准#ifndef ...包含警卫。

以下对我有用:

cd /tmp
git clone https://github.com/thrust/thrust.git
git clone https://github.com/cgmb/guardonce.git
cd guardonce
git checkout v2.0.0
python -m guardonce.once2guard -r "/tmp/thrust/thrust/"

这会在每个推力头文件中创建包含防护:

 git diff /tmp/thrust


--- a/thrust/adjacent_difference.h
+++ b/thrust/adjacent_difference.h
@@ -19,7 +19,8 @@
  *  \brief Compute difference between consecutive elements of a range
  */

-#pragma once
+#ifndef ADJACENT_DIFFERENCE_H
+#define ADJACENT_DIFFERENCE_H

. . .
于 2015-04-21T10:29:39.397 回答
1

好吧,宏(以及因此#pragma)由预处理器(cpp,不要与c ++扩展名混淆)处理,因此理论上您可以尝试使用支持#pragma的预处理器,然后使用编译器构建生成的代码。

于 2015-04-20T17:37:58.767 回答