相关疑难解决方法(0)

为什么`int;`在C中编译好,但在C++中没编译?

请考虑以下程序(请参阅此处的实时演示).

#include <stdio.h>
int main(void)
{
      int ;  // Missing variable name
      puts("Surprise");
}
Run Code Online (Sandbox Code Playgroud)

我的编译器gcc 4.8.1给出了以下警告:

[警告]空声明中无用的类型名称[默认启用]

为什么编译好?我不应该得到编译错误吗?当我将它编译为C++程序时,g ++ 4.8.1给出以下错误:

[错误]声明没有声明任何内容[-fpermissive]

c c++ gcc variable-declaration language-lawyer

57
推荐指数
3
解决办法
4532
查看次数

什么是匿名对象?

什么是匿名对象?

C++是否支持/拥有匿名对象?

c++ standards visual-c++ c++11

12
推荐指数
1
解决办法
2万
查看次数

C++匿名变量

为什么这不起作用?

 0. #define CONCAT(x, y) x ## y
 1. 
 2. #define VAR_LINE(x) \
 3.     int CONCAT(_anonymous, __LINE__) = x
 4. 
 5. #define VAR_LINE2(x) \
 6.     int _anonymous ## x = 1
 7.
 8. int main()
 9. {
10.     VAR_LINE(1);
11.     VAR_LINE(1);
12.     VAR_LINE(1);
13.     VAR_LINE2(__LINE__);
14. }
Run Code Online (Sandbox Code Playgroud)

上述宏观扩张的结果

int _anonymous__LINE__ = 1;
int _anonymous__LINE__ = 1;
int _anonymous__LINE__ = 1;
int _anonymous13 = 1;
Run Code Online (Sandbox Code Playgroud)

如果我不必将该__LINE__宏写为参数,那将会很方便.

我认为这个问题非常清楚.我希望能够生成匿名变量,以便在同一范围内声明多个变量时,此宏不会因重定义错误而失败.我的想法是使用预定义的__LINE__宏,因为不会像这样在同一行上声明变量.但宏观扩张困扰我,你能帮忙吗?

更新:正确答案

感谢Luc Touraille.但是,建议的解决方案存在一个小问题.操作数和##运算符之间必须有空格(显然标准说明不然,但如果运算符和操作数之间没有空格,则PS3风格的GCC不会正确扩展宏).

#define _CONCAT(x,y) x ## y
#define CONCAT(x,y) …
Run Code Online (Sandbox Code Playgroud)

c++ c-preprocessor

6
推荐指数
1
解决办法
2293
查看次数

通过引用传递匿名变量

标准C++类型(如int或char)具有ctors,因此您可以使用以下表达式:

int a = int(67); // create anonymous variable and assing it to variable a
int b(13);       // initialize variable b
int(77);         // create anonymous variable
Run Code Online (Sandbox Code Playgroud)

用户定义的类型(结构或类)能够做同样的事情:

struct STRUCT
{
  STRUCT(int a){}
};

STRUCT c = STRUCT(67);
STRUCT d(13);
STRUCT(77);
Run Code Online (Sandbox Code Playgroud)

问题是:为什么我们可以通过引用匿名结构或类实例传递,但不能传递标准类型?

struct STRUCT
{
  STRUCT(int a){}
};

void func1(int& i){}
void func2(STRUCT& s){}
void func3(int i){}
void func4(STRUCT s){}

void main()
{
  //func1(int(56));  // ERROR: C2664
  func2(STRUCT(65)); // OK: anonymous object is created then assigned to a reference
  func3(int(46));    // …
Run Code Online (Sandbox Code Playgroud)

c++ anonymous pass-by-reference

6
推荐指数
2
解决办法
5660
查看次数

是否可以将"未命名"变量传递给函数?

假设有以下功能:

void SetTheSize(const SIZE *size) { ... }
Run Code Online (Sandbox Code Playgroud)

有没有办法在不指定SIZE变量的情况下调用该函数?例如,

SetTheSize((const SIZE*)&{10, 10});
Run Code Online (Sandbox Code Playgroud)

编辑: 我应该提到SIZE是一个结构,没有SIZE(int,int)构造函数.

c++

2
推荐指数
1
解决办法
1881
查看次数

定义包括声明吗?

int a = 0;
Run Code Online (Sandbox Code Playgroud)

这段代码可以解读为:a 的声明 a 的定义,对吧?

c++

0
推荐指数
1
解决办法
144
查看次数