为了将"todo"项添加到我的代码中,我想在编译器输出中添加一条消息.
我希望它看起来像这样:
c:/temp/main.cpp(104): TODO - add code to implement this
Run Code Online (Sandbox Code Playgroud)
为了利用Visual Studio构建输出功能,通过双击导航到相应的行.
但__LINE__宏似乎扩展到了一个int不允许写作的
#pragma message( __FILE__ "("__LINE__"): ..." )
Run Code Online (Sandbox Code Playgroud)
会有另一种方式吗?
在@Zaibis建议(以及相关的我自己的答案到什么是宏名的有效字符?,以及在标识符(和其他Unicode字符)不能用g ++允许))...
clang允许很多"疯狂"的角色..虽然我一直在努力找到很多押韵或理由 - 至于为什么有些人被允许(ϟツ⌘☁½),而其他人则不然(▶︎∀★©).
例如,以下所有编译A-OK(clang-700.1.76)
#define ?: // OK (Pile of poo)
#define ? @end // OK (HALFWIDTH BLACK SQUARE)
#define @interface // OK (NEGATIVE SQUARED LATIN CAPITAL LETTER K)
#define ? @protocol // OK (FULLWIDTH LATIN CAPITAL LETTER P)
Run Code Online (Sandbox Code Playgroud)
但以下都导致相同的编译器错误...
Macro name must be an identifier.
#define ? TEL
#define ? NO
#define ? UP
#define ? ==
#define APPLE
Run Code Online (Sandbox Code Playgroud)
clang的文档提到了这个问题,只说明......
...支持C99和C++中的扩展标识符.此功能允许标识符包含某些Unicode字符,如活动语言标准所指定; 这些字符可以使用UTF-8编码直接写入源文件,也可以使用通用字符名称(\ u00E0,\ U000000E0)引用.
所以,我想我在问......什么是"主动语言标准",我怎样才能找到合法标识符的权威来源.
我创建了以下代码 …
以下代码的输出是什么
int x,a=3;
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);
输出是:11 3.我想知道怎么样?一个手段后+符号是什么?
我想做点什么:
#define ,
#define MAX 10,000,000
// ...
#undef ,
Run Code Online (Sandbox Code Playgroud)
这有什么诀窍吗?
编辑:我知道'C++ 14中的数字分隔符.我正在寻找一个技巧来为不合规的编译器做同样的事情.
编辑2:请考虑Variadic Macros.
结构体指针的使用非常频繁,因此有一个特殊的运算符:->。下面的表达式是等价的:
(*x).y
x->y
Run Code Online (Sandbox Code Playgroud)
将此运算符简单地视为如下定义的预处理器宏是否公平:
#define (x)-> (*(x).)
为什么或者为什么不?或者它从一开始就被编码为运算符 - 这有何不同/优势?
只是好奇。
我写了一个B类作为A的子类来扩展它.现在我想改变一切
a = A::create();
Run Code Online (Sandbox Code Playgroud)
至
a = (A*)B::create();
Run Code Online (Sandbox Code Playgroud)
一切正常.但我不想在创建A对象的任何地方手动更改代码.所以我尝试了以下#define指令
#define A::create (A*)B::create
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用.我不知道问题是什么.有帮助吗?我可以在::?中使用#define指令吗?为什么它不起作用?
c ×4
c++ ×4
syntax ×2
clang ×1
identifier ×1
line-numbers ×1
operators ×1
pointers ×1
pragma ×1
struct ×1