gpt4 book ai didi

c++ - 高级 C 和 C++ 编译 : unable to compile the example program mentioned in the book

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:10 26 4
gpt4 key购买 nike

我正在阅读 Milan Stevanovic 的《Advanced C and C++ compiling》一书

以下是书中的快照,然后是我面临的问题。


概念图:演示项目

用于构建这个简单项目的开发环境将基于运行在Linux。 list 2-1 到 2-3 包含演示项目中使用的代码。

list 2-1。 函数.h

#pragma once
#define FIRST_OPTION
#ifdef FIRST_OPTION
#define MULTIPLIER (3.0)
#else
#define MULTIPLIER (2.0)
#endif

float add_and_multiply(float x, float y);

list 2-2。 函数.c

int nCompletionStatus = 0;
float add(float x, float y)
{
float z = x + y;
return z;
}
float add_and_multiply(float x, float y)
{
float z = add(x,y);
z *= MULTIPLIER;
return z;
}

list 2-3。 main.c

#include "function.h"
extern int nCompletionStatus = 0;
int main(int argc, char* argv[])
{
float x = 1.0;
float y = 5.0;
float z;
z = add_and_multiply(x,y);
nCompletionStatus = 1;
return 0;
}

演示项目预处理示例:

gcc 编译器提供了只对输入源文件进行预处理阶段的模式:

gcc -i <input file> -o <output preprocessed file>.i

除非另有说明,否则预处理器的输出是与输入文件同名的文件,并且其文件扩展名为.i。在文件 function.c 上运行预处理器的结果如 list 2-4 所示。

list 2-4。 函数.i

# 1 "function.c"
# 1 "
# 1 "
# 1 "function.h" 1
# 11 "function.h"
float add_and_multiply(float x, float y);
# 2 "function.c" 2
int nCompletionStatus = 0;
float add(float x, float y)
{
float z = x + y;
return z;
}
float add_and_multiply(float x, float y)
{
float z = add(x,y);
z *= MULTIPLIER;
return z;
}

如果将很少的额外标志传递给 gcc,则可以获得更紧凑和更有意义的预处理器输出,例如

gcc -E -P -i <input file> -o <output preprocessed file>.i

这会生成如 list 2-5 所示的预处理文件。

list 2-5。 function.i(精简版)

float add_and_multiply(float x, float y);
int nCompletionStatus = 0;
float add(float x, float y)
{
float z = x + y;
return z;
}
float add_and_multiply(float x, float y)
{
float z = add(x,y);
z *= 3.0;
return z;
}

显然,预处理器替换了符号 MULTIPLIER,其实际值基于以下事实:USE_FIRST_OPTION 变量已定义,最终成为 3.0


问题:

当我使用 gcc 编译程序时,以下是我面临的错误来 self 的终端的快照。

gcc -i function.c -o function.i
cc1: error: unrecognized command line option '-i'

gcc function.c -o function.i
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o:
In function '_start':
(.text+0x18): undefined reference to 'main'
collect2: ld returned 1 exit status

$pwd
/home/adminuser/advance_compiling
$ll
total 20
drwxrwxr-x 2 adminuser adminuser 4096 Jan 10 23:51 ./
drwxr-xr-x 26 adminuser adminuser 4096 Jan 10 23:57 ../
-rw-rw-r-- 1 adminuser adminuser 216 Nov 15 08:58 function.c
-rw-rw-r-- 1 adminuser adminuser 163 Jan 10 23:33 function.h
-rw-rw-r-- 1 adminuser adminuser 257 Dec 28 06:46 main.c

我如何摆脱这种情况并继续学习类(class)?请提出建议。

最佳答案

-i 不是有效的命令行选项 - 我不确定这本书是从哪里得到的。为了仅运行预处理器,您应该改用选项 -E

关于c++ - 高级 C 和 C++ 编译 : unable to compile the example program mentioned in the book,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com