找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1148|回复: 9
收起左侧

讨论一个编程习惯的问题(关于宏定义)

[复制链接]
ID:401564 发表于 2022-8-31 00:42 | 显示全部楼层 |阅读模式
C语言也学了有快一年了,不算很会,但也算是已经入门了
有个问题一直搞不明白
我看了几本书,书上都是推荐把宏定义放在.c文件中,然后,就开始说这样做的各种优点什么的(PIC单片机除外)
甚至是专门一个文件来放宏定义的,估计是大程序用的吧,咱没玩过
网上有说放头文件的,也有说放源文件的
但我看了好几个老外的程序,很多宏定义都是放在.h文件中,而且是包含来包含去的,半天才找着
像这样的
#define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK  (10)
然后,就在.c代码中出现这样的  USER_NUM_CTRL_TICKS_PER_TRAJ_TICK
我就在想,就让老外来看,他也不一定能看明白 USER_NUM_CTRL_TICKS_PER_TRAJ_TICK 这是什么意思吧?
你们一般都是怎么处理的呢
回复

使用道具 举报

ID:624769 发表于 2022-8-31 02:11 | 显示全部楼层
目的来讲,他应该不是为了随便谁看一下就明白。目的是,当数值调整时, 只需要修改 #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK  (10) 这一句,就可以从 -10 变成其它任何值,为不需要去代码里面一个个改。
回复

使用道具 举报

ID:123289 发表于 2022-8-31 08:38 | 显示全部楼层
对于单个程序来说意义不大。
每个人有自己的习惯对一此东东进行命名、定义。对于一个程序也只用一次。
但你总不至于只写一个程序吧。每次都重复劳动一次累。不如次习惯性的东东打个包,建个库文件,以例每次调用。能做到这一点就可以了。不在乎你用什么方案。
例如。将常用的命名、定义做成一个通用包文件。将特殊命名、定义做成一个特有名称包文件。
这样通用包的使用效率就高了。
一句话,只要你认为方便,怎么做,你看了办。
回复

使用道具 举报

ID:883242 发表于 2022-8-31 10:17 | 显示全部楼层
这有什么看不懂的?
回复

使用道具 举报

ID:866313 发表于 2022-8-31 10:48 | 显示全部楼层
宏的作用以及语法等可以看下这个专辑:为宏正名
回复

使用道具 举报

ID:752974 发表于 2022-8-31 10:52 | 显示全部楼层
C语言的宏定义功能是很强大的,使用宏定义的主要目的是:程序的可读性好,方便移植,方便修改。
回复

使用道具 举报

ID:689247 发表于 2022-8-31 11:10 | 显示全部楼层
我自己的习惯是,单片机经常使用的宏定义会单独创建一个define.h文件,里面包含开关串口等。一些外接设备例如oled,所使用的宏就写在oled.h自己的头文件中。
这样也方便在移植外接设备的时候不用再添加。
单片机常用define头文件
外接芯片头文件
回复

使用道具 举报

ID:689247 发表于 2022-8-31 11:15 | 显示全部楼层
cpu小白白 发表于 2022-8-31 11:10
我自己的习惯是,单片机经常使用的宏定义会单独创建一个define.h文件 ...

**************define头文件**************
#ifndef _DEFINE_H
#define _DEFINE_H

#include "stm32f10x.h"

/********** System_Enable ********/
#define DBUG_ENABLE         1

/*
@ UART_PRINT_ENABLE 串口打印开关
@ 默认为串口1打印
# user_uart.h -> Gpio_Param 中修改或添加按键GPIO
*/
#define UART_PRINT_ENABLE  1
/*
@ KEY_ENABLE 按键使能开关
@ 定义为1后开启按键功能
# 修改gpio:        define.h -> Gpio_Param 中修改或添加按键GPIO
#                         user_gpio.c -> GPIO_Init() 中修改或添加按键编号
# 添加按键功能:key.c -> Key_Value() 中修改或添加按键
*/
#define KEY_ENABLE                        0        

/*
@ I2C_ENABLE 按键使能开关
@ 定义为1后开启I2C功能
# define.h -> Gpio_Param 中修改I2C使用GPIO
*/
#define I2C_ENABLE                        1        


**************外设ads1115头文件************
#ifndef _ADS1115_H
#define        _ADS1115_H

#include "user_i2c.h"
#include "user_uart.h"
#include "variable.h"
#include "define.h"

#define CHANNEL_NUMBER        4
#define CHANNEL_BASE        0xc4e3

#define READ_ADS1115_TIME_INTERVAL 3
#define SEND_ADS1115_TIME_INTERVAL READ_ADS1115_TIME_INTERVAL*CHANNEL_NUMBER

                                                //单次 单通道   4.096  连续  860sps
#define CHANNEL_0 0xc4e3    // 1    100      001    0  111      0 0 011          //01
#define CHANNEL_1 0xd4e3    // 1    101      001    0  111      0 0 011         
#define CHANNEL_2 0xe4e3    // 1    110      001    0  111      0 0 011
#define CHANNEL_3 0xf4e3    // 1    111      001    0  111      0 0 011
                                           //010          2.048
回复

使用道具 举报

ID:301191 发表于 2022-9-3 14:25 | 显示全部楼层
顶一下
回复

使用道具 举报

ID:47286 发表于 2022-9-21 13:02 | 显示全部楼层
无所谓吧 自己喜欢怎么弄就怎么弄 中国不是有句老话叫 汝之良药吾之某某么 别人好的东西不一定合适自己
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表