我的编译器将其扩展为199711L.那是什么意思?我读到__cplusplus> 199711L表示C++ 11.这个宏有什么可能的扩展,它意味着什么?
我知道我可以通过这样做来使用预处理器指令来检查Debug/Release:
#if DEBUG
//debug mode
#elif
//release mode
#endif
Run Code Online (Sandbox Code Playgroud)
但是如何检查其他配置,比如Test.在VB中你可以这样做:
#If CONFIG = "Release" Then
'Release mode
#ElseIf CONFIG = "Test" Then
'Test mode
#ElseIf CONFIG = "Debug" Then
'Debug mode
#End If
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是在C#中,我该如何检查测试模式?我有一些代码,如果我在调试和测试中,我想要执行,但不是在发布模式,所以具体来说,我需要一种方法来检查不在发布模式.在VB中我会这样做:
#If Not CONFIG = "Release" Then
'Do something here for every configuration that is not Release
#End If
Run Code Online (Sandbox Code Playgroud) 我正在使用遗留代码并发现:
#if (1 > 1)
//define some function
#endif
Run Code Online (Sandbox Code Playgroud)
不确定,这可能与更典型的任何不同#if 0,注释掉代码?有什么想法吗?
我认为这是一个简单的问题所以我认为我错过了一些明显的东西.我真的没有使用预处理器指令,但我正在查看某人的代码,并且认为这是我应该熟悉的东西.
所以我看了msdn示例,它有代码:
#define DEBUG
// ...
#if DEBUG
Console.WriteLine("Debug version");
#endif
Run Code Online (Sandbox Code Playgroud)
我的两个问题是:
#define MYTEST然后写入控制台的示例,具体取决于它是否"已定义",但这与仅使用变量有何不同?我在这里错过了什么?我需要在此调用Staging中添加一个条件..
在这种情况下如何做到这一点.
#ifdef MYAPP_PRODUCTION
buildMode = @"Production";
#else
#ifdef MYAPP_RELEASE
buildMode = @"Release";
#else MYAPP_DEBUG
buildMode = @"Debug";
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
另一个是MyApp_Staging需要包含在这个if条件中如何做到这一点?
如何在Java中正确地从C#中提供以下功能?
[C#]
#define PRODUCTION //Change from sandbox to production to switch between both systems.
#if SANDBOX
using NetSuite.com.netsuite.sandbox.webservices;
#endif
#if PRODUCTION
using NetSuite.com.netsuite.webservices;
#endif
Run Code Online (Sandbox Code Playgroud) 什么意思#line在Ç语言?它会在哪里使用?
我找到了这个C代码示例,我绝对感到困惑:
#include <stdio.h>
#define M(a,b) a%:%:b
main()
{
int a=1, b=2, ab[]={10,20}, c;
printf( "%d", M(a,b)<:a:> );
printf( "%d", M(a,b)<:a:>?a:b );
printf( "%d", c=M(a,b)<:a:>?a:b );
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释这应该做什么吗?它甚至没有在Visual Studio中编译,但我在线运行(在ideone.com上)并打印2011,这也增加了混乱.
我一直在寻找代码高尔夫,并有一个想法尝试这个代码:
#define D #define 添加此行后,一切正常,但我将其扩展为:
#define D #define
D VALUE
Run Code Online (Sandbox Code Playgroud)
在这里我得到了5个编译错误.如果我D改成#define一切都很好,有人可以解释一下,为什么这段代码是非法的?
注意: 我使用的是VS2008编译器.
编辑: 经过一些答案,我看到我需要给出编译错误列表:
第一个错误显示D不仅是define,还包括#.
我经常发现自己处于需要缩进预处理程序指令的情况,例如其他代码(例如#if缩进if).它似乎是合法的,这是常识,它有时是一件好事,但Visual不会让它变得容易.
有没有办法阻止Visual C++ 2010编辑器每次我无辜地按下时将代码粘贴到左边#?并且不要使用自动缩进(CTRL + K,CTRL + F)来破坏预处理程序指令缩进?或者更好的是,像其他一样处理预处理器指令?
c++ indentation visual-c++-2010 c-preprocessor preprocessor-directive