在API中导出常量的正确方法

在下面的例子中显示的两个解决scheme中的哪一个是从我的API(一个Windows DLL) 导出常量的正确方法 ,为什么它是优越的select?

头文件

namespace ExampleAPI { // Solution one extern const DWORD __declspec(dllexport) AKTION_OK; extern const DWORD __declspec(dllexport) AKTION_FEHLER; // Solution two const DWORD AKTION_FEHLER_DATENBANK = 2; const DWORD AKTION_FEHLER_XXX = 3; } 

Cpp文件

 namespace ExampleAPI { // Solution one const DWORD AKTION_OK = 0; const DWORD AKTION_FEHLER = 1; } 

我认为解决scheme之一是更好的替代scheme,因为常量只在cpp文件中定义一次,而不是在包含头文件的每个链接单元中定义。 如我错了请纠正我。 虽然它缺乏可读性…

使用第二种解决方案时,编译器将在使用API​​编译应用程序时知道这些常量。 这可以让编译器执行更多的优化。

第一种解决方案的优点是可以更改常量而无需使用API​​重新编译应用程序。

我根本看不到这些解决方案。

一个定义了一个编译时间常量,另一个定义了一个常量值的链接。 从编译器的角度来看,在优化时它们是不同的:例如(10+AKTION_FEHLER_DATENBANK)可以在解决方案1的情况下进行编译时评估,但在解决方案2的情况下则不能。

但更重要的情况下,它们不能互换使用,例如: case AKTION_FEHLER_DATEBANK:案例1合法,但不是案例2。

同样对于char Array[AKTION_FEHLER_DATEBANK]