[C/C++]_[初级]_[三元运算符的陷阱]

场景

  1. 在使用三元运算法?:时, 发现计算的结果不是自己想要的 150?
auto tSize = 100;
auto check = 1;
tSize = tSize + (check) ? 50 : 0
# Project: 项目3 # Makefile created by Dev-C++ 5.11 CPP = g++.exe CC = gcc.exe WINDRES = windres.exe OBJ = D:/新建文件夹/test/三元运算符训练.o D:/新建文件夹/test/未命名6.o LINKOBJ = D:/新建文件夹/test/三元运算符训练.o D:/新建文件夹/test/未命名6.o LIBS = -L"D:/新建文件夹/Dev-Cpp/MinGW64/lib" -L"D:/新建文件夹/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib" -static-libgcc INCS = -I"D:/新建文件夹/Dev-Cpp/MinGW64/include" -I"D:/新建文件夹/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"D:/新建文件夹/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" CXXINCS = -I"D:/新建文件夹/Dev-Cpp/MinGW64/include" -I"D:/新建文件夹/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"D:/新建文件夹/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"D:/新建文件夹/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++" BIN = 项目3.exe CXXFLAGS = $(CXXINCS) -std=gnu99 CFLAGS = $(INCS) -std=gnu99 RM = rm.exe -f .PHONY: all all-before all-after clean clean-custom all: all-before $(BIN) all-after clean: clean-custom ${RM} $(OBJ) $(BIN) $(BIN): $(OBJ) $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS) D:/新建文件夹/test/三元运算符训练.o: D:/新建文件夹/test/三元运算符训练.c $(CPP) -c D:/新建文件夹/test/三元运算符训练.c -o D:/新建文件夹/test/三元运算符训练.o $(CXXFLAGS) D:/新建文件夹/test/未命名6.o: D:/新建文件夹/test/未命名6.c $(CPP) -c D:/新建文件夹/test/未命名6.c -o D:/新建文件夹/test/未命名6.o $(CXXFLAGS)
11-19
在理解和优化 Dev - C++ 5.11 生成的 C 语言项目 Makefile 之前,先了解一些基本概念。Makefile 是一种用于自动化编译和构建项目的脚本文件,它可以根据文件的修改时间来决定哪些文件需要重新编译,从而提高编译效率。g++.exe 是 GNU 的 C++ 编译器,gcc.exe 是 GNU 的 C 编译器。 ### 基本理解 通常,一个简单的 Makefile 会包含目标(target)、依赖(dependency)和命令(command)。目标是要生成的文件,依赖是生成目标所需要的文件,命令则是生成目标的具体操作。 假设项目中有 `main.c`、`add.c`、`sub.c` 等源文件,并且涉及三元运算符训练和未命名 6 文件(这里推测为 `unnamed6.c`),一个基本的 Makefile 可能如下: ```makefile # 定义编译器 CC = gcc # 定义编译选项 CFLAGS = -Wall -g # 定义目标文件 TARGET = out.exe # 定义源文件 SRCS = main.c add.c sub.c unnamed6.c # 定义目标文件 OBJS = $(SRCS:.c=.o) # 默认目标 all: $(TARGET) # 生成可执行文件 $(TARGET): $(OBJS) $(CC) $(CFLAGS) $(OBJS) -o $(TARGET) # 生成目标文件 %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # 清理生成的文件 clean: rm -f $(OBJS) $(TARGET) ``` ### 代码解释 - `CC = gcc`:定义编译器为 `gcc`。 - `CFLAGS = -Wall -g`:定义编译选项,`-Wall` 表示显示所有警告信息,`-g` 表示生成调试信息。 - `TARGET = out.exe`:定义最终生成的可执行文件名为 `out.exe`。 - `SRCS`:列出所有的源文件。 - `OBJS`:根据源文件生成对应的目标文件列表。 - `all`:默认目标,依赖于 `$(TARGET)`。 - `$(TARGET): $(OBJS)`:生成可执行文件的规则,依赖于所有的目标文件。 - `%.o: %.c`:生成目标文件的通用规则,`$<` 表示第一个依赖文件,`$@` 表示目标文件。 - `clean`:清理规则,用于删除所有生成的目标文件和可执行文件。 ### 优化建议 - **使用变量**:可以将常用的编译选项、源文件列表等定义为变量,方便修改和维护。 - **增量编译**:Makefile 会根据文件的修改时间来决定哪些文件需要重新编译,确保只编译有修改的文件。 - **添加更多规则**:可以添加更多的规则,如静态库生成、动态库生成等。 ### 三元运算符训练 如果在代码中使用了三元运算符,可以在 Makefile 中添加相应的编译选项来确保代码的正确性。例如,如果使用了 C99 标准的特性,在 `CFLAGS` 中添加 `-std=c99`: ```makefile CFLAGS = -Wall -g -std=c99 ``` ### 解决可能的问题 如果在使用 Makefile 过程中出现问题,如编译错误、链接错误等,可以根据错误信息进行排查。例如,如果出现 `ld returned 1 exit status` 错误,可能是链接器出现问题,需要检查是否有未定义的符号、库文件是否正确等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白行峰 (花名)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值