有没有办法全局声明#define?
就像我想拥有一个文件,例如,
#define MONO
Run Code Online (Sandbox Code Playgroud)
我希望所有源代码文件都知道这个预处理器指令已经定义.我怎么做到这一点?
在C/C++中,您可以在代码中定义宏,如下所示:
#define OLD_WAY 1
Run Code Online (Sandbox Code Playgroud)
虽然我从来没有这样做过,但我认为C#中可以使用同样的东西.更重要的是,在C/C++中,可以通过执行以下操作来执行某些条件编译逻辑:
#if OLD_WAY == 1
int i = 0;
#else
int i = 1;
#endif
Run Code Online (Sandbox Code Playgroud)
好的,所以这一切都很酷.而且,我认为这种逻辑在C#中是可能的.我想知道的是,我如何在项目级别定义常量,以便我可以输入逻辑,如果我定义常量的一个方法或另一个代码块,我将允许我条件编译一个代码块如果我不这样定义?我假设它已经在项目的属性中的某个地方完成,但我如何定义它?
我有一个使用Visual Studio 2008构建的非常大的应用程序,它可以在Windows XP上运行.该代码由一个包含六个独立项目的解决方案文件组成.我的工作是将此应用程序移植到Linux上运行.我之前没有做过这样的事.
我昨天发现我的公司希望这个代码在我完成之后仍然可以在Windows上编译.我实现这一目标的第一个想法是使用预处理器语句,例如:
#define COMPILE_FOR_LINUX
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用预处理器块告诉编译器哪些文件包含在头文件中,如下所示:
#ifdef COMPILE_FOR_LINUX
// include required Linux headers here and skip Windows header includes
#else
// include required Windows headers here and skip Linux header includes
#endif
Run Code Online (Sandbox Code Playgroud)
在包含适当的文件之后,我可以使用以下块来封装所有与平台相关的代码:
#ifdef COMPILE_FOR_LINUX
// compile Linux specific code used here.
#else
// compile Windows specific code used here.
#endif
Run Code Online (Sandbox Code Playgroud)
为了让某人能够轻松地为他们的首选平台编译应用程序,我想在一个地方指定COMPILE_FOR_LINUX.但是,我不知道如何做到这一点.
我的一个想法是创建一个空头文件,然后让解决方案中的每个文件都包含Visual Studio解决方案文件包含路径中指定的头文件.对于Linux,我有另一个版本的头文件定义COMPILE_FOR_LINUX,然后让makefile指向这个版本而不是空版本.但是,我确信这是一个非常粗糙的解决方案,我不确定它是否会起作用.
任何人都可以提出一种更优雅的方法来全局定义或创建变量,使解决方案中的每个文件都可以看到它吗?