相关疑难解决方法(0)

如何使用#pragma message()以便消息指向文件(lineno)?

为了将"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)

会有另一种方式吗?

c++ pragma visual-studio-2010 line-numbers predefined-macro

32
推荐指数
3
解决办法
4万
查看次数

什么构成"有效"C标识符?

在@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)引用.

所以,我想我在问......什么是"主动语言标准",我怎样才能找到合法标识符的权威来源.

我创建了以下代码 …

c syntax naming-conventions clang identifier

21
推荐指数
4
解决办法
2980
查看次数

变量后面的+符号是什么意思?

以下代码的输出是什么
int x,a=3;
x=+ +a+ + +a+ + +5;
printf("%d %d",x,a);

输出是:11 3.我想知道怎么样?一个手段后+符号是什么?

c c++

5
推荐指数
2
解决办法
2311
查看次数

在C或C++中使用逗号作为宏名称

我想做点什么:

#define , 
#define MAX 10,000,000
// ...
#undef ,
Run Code Online (Sandbox Code Playgroud)

这有什么诀窍吗?

编辑:我知道'C++ 14中的数字分隔符.我正在寻找一个技巧来为不合规的编译器做同样的事情.
编辑2:请考虑Variadic Macros.

c c++ c-preprocessor

4
推荐指数
3
解决办法
397
查看次数

结构体指针运算符猜想(理论)

结构体指针的使用非常频繁,因此有一个特殊的运算符:->。下面的表达式是等价的:

(*x).y
 x->y
Run Code Online (Sandbox Code Playgroud)

将此运算符简单地视为如下定义的预处理器宏是否公平:

#define (x)-> (*(x).)

为什么或者为什么不?或者它从一开始就被编码为运算符 - 这有何不同/优势?

只是好奇。

c syntax struct pointers operators

3
推荐指数
1
解决办法
1606
查看次数

我可以在::?中使用#define指令吗?为什么它不起作用?

我写了一个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++

-3
推荐指数
1
解决办法
95
查看次数