C++学习笔记

Make

$ make ex1
# or this one too
$ CFLAGS="-Wall" make ex1

第一个命令中你告诉make,“我想创建名为ex1的文件”。于是Make执行下面的动作:

  • 文件ex1存在吗?
  • 没有。好的,有没有其他文件以ex1开头?
  • 有,叫做ex1.c。我知道如何构建.c文件吗?
  • 是的,我会运行命令cc ex1.c -o ex1来构建它。
  • 我将使用ccex1.c文件来为你构建ex1

每次执行make指令之前都会读取一遍Makefile文件

可以使用Makefile来简化操作

CFLAGS=-Wall -g

clean:
	rm -f ex1

注:rm -f ex1指令前是TAB

创建Makefile文件后再次运行make

$ make clean
rm -f ex1
$ make ex1
cc -Wall -g    ex1.c   -o ex1
ex1.c: In function 'main':
ex1.c:3: warning: implicit declaration of function 'puts'

构建所有项目

可以用all来表示所有构建项目操作。当只使用make时,会默认第一个指令allall需要ex1ex1需要ex1.c这样可以构建所有项目

CFLAGS=-Wall -g

all:ex1

ex1:ex1.c
        gcc -o ex1 ex1.c

clean:
        rm -f ex1

C++宏定义详解 - Boblim - 博客园

两级宏定义

这个技术是GNU CPP手册推荐的做法

#define str_temp(x) #x
#define str(x) str_temp(x)

不直接定义#define str(x) #x的原因是C标准规定(ISO/IEC 9899:2011 §6.10.3.1):当参数被字符串化操作符#处理时,该参数不会被宏展开

直接定义的展开过程

#define NUM 123
#define str(x) #x

// 展开步骤:
str(NUM) → #NUM → "NUM"  // NUM没有被展开

两级定义的展开过程

#define NUM 123
#define str_temp(x) #x
#define str(x) str_temp(x)

// 展开步骤:
str(NUM) → str_temp(123) → #123 → "123"  // 先展开NUM参数
posted @ 2025-07-25 17:43  r_0xy  阅读(6)  评论(0)    收藏  举报