在下面的例子中显示的两个解决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]
。