小编ton*_*ark的帖子

预处理如何在此代码段中工作?

#include<stdio.h>
#define A -B
#define B -C
#define C 5

int main() {
  printf("The value of A is %dn", A); 
  return 0;
} 
Run Code Online (Sandbox Code Playgroud)

我遇到了上面的代码.我认为在预处理之后,它会被转换为

// code from stdio.h

int main() {
  printf("The value of A is %dn", --5); 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这应该导致编译错误.但是,代码编译良好并产生输出5.

在这种情况下如何对代码进行预处理,以免导致编译器错误?

PS:我在Linux x86-64上使用gcc版本8.2.0.

c macros preprocessor

5
推荐指数
1
解决办法
72
查看次数

make 没有对 g++ 使用 -std=c++11 选项

我正在尝试使用 make 编译 C++ 文件。但是,默认情况下它不使用 -std=c++11 标志。每当我需要编译使用 c++11 特定功能的程序时,我必须使用 g++ 显式编译它。

所以,我想问一下如何让系统上的所有 c++ 文件自动使用选项 -std=c++11 。

如果我需要为 g++ 更改一些全局生成文件,Linux Mint 18 上生成文件的位置是什么,需要更改或添加什么?

或者我需要为自己创建一个 Makefile 吗?

编辑 1:我调用 make like

make myfile
Run Code Online (Sandbox Code Playgroud)

并且目录中只有 .cpp 文件及其二进制文件。我在目录中没有任何 Makefile。

编辑 2:这里myfile是我要编译的 C++ 文件的名称。

当我使用 -d 选项运行 make 时,我得到以下输出(我无法粘贴所有输出,因为它很长并且超出了主体尺寸限制,因此,我包含了输出的屏幕截图)。 Image 1
而这个 image(2) 从末尾开始有一些线条。
图 2

我故意对文件进行了更改,"MagicalWord.cpp"以便 make 找到要制作的东西!

makefile g++ c++11

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

标签 统计

c ×1

c++11 ×1

g++ ×1

macros ×1

makefile ×1

preprocessor ×1