#define 和int 有什么差别啊?! 求助
arduino吧
全部回复
仅看楼主
level 3
弓山雁60 楼主
[揉脸]
2013年01月17日 10点01分 1
level 3
弓山雁60 楼主
吧主 c o m e o n!
@小猪会滑轮
2013年01月17日 10点01分 2
瞎了。。@小猪会轮滑
2013年01月17日 10点01分
level 3
弓山雁60 楼主
有的是
int ledPin 13;
有的是
#define LED 13;
2013年01月17日 10点01分 3
额 其实我个人的观点是,int是定义13引脚是接led的引脚,define是宏定义的意思,他在程序里代表替换 就说在程序里的13引脚都用LED来替换 这样可以更直白的看到你的13引脚接的是LED 而且如果13引脚坏了的话 可以用12代替 这时你不用改程序 只需要把LED后面改写成12即可,个人观点 不知道能不能懂
2013年01月17日 13点01分
回复 飘雪才子 :貌似就是这个意思,我学51的时候也纠结过这个问题
2013年01月19日 12点01分
回复 只要茜微笑 :哈哈 是啊 貌似很多地方都是想通的呢[抖胸]
2013年01月20日 00点01分
应该是ledPin=13
2013年01月20日 07点01分
level 7
差不多吧......没用过define,你试没试过?
应该是int ledPin=13;
拿UNO试试,就用13口,有个LED一实验就知道了
2013年01月17日 11点01分 4
好像结果是一样的。 有人说int的使用范围更加广
2013年01月17日 12点01分
level 13
额,我没学过c。。。。。。。
2013年01月17日 11点01分 5
level 6
这个问题还真是不好解释。
#define LED 13
#define 的精髓是替换,使用上面的语句你就定义了一个宏LED出来,之后程序里面出现LED的地方都用13代替
#define LED 13
digitalWrite(LED, HIGH);
<=>
digitalWrite(13, HIGH); (这两个语句在编译时等同对待,没有任何差别,生成的code也是完全相同的)
而int LED = 13;不同了,
int单独使用时(int LED=13;)表示声明一个变量,这个变量存储在RAM里面,而这个值是可以变化的(不考虑用const修饰的情况),让他等于13就是13让他等于2就等于2。
int LED = 13;
digitalWrite(LED, HIGH);
<≠>
digitalWrite(13,High);(这两个语句完完全全彻彻底底的不对等,生成的code也不相同,不能混淆)为了进一步说明,我再写一段小代码。
int LED=0;
for(;LED<=13; LED++)
{
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
}
这段代码将Arduino板子上的0~13号IO口依次置为高电平。
int变量可以向上面一样使用,而define则不行。
下面的代码是完全错误的
#define LED 13
LED = 1; /** 错误,不能对宏进行赋值操作 */
2013年01月17日 12点01分 6
不好解释非常不好解释
2013年01月17日 12点01分
谢谢 。大概知道了一点。。
2013年01月17日 12点01分
回复 Anlince :恩,再看看书理解一下吧
2013年01月17日 12点01分
回复 gaplee :没有书。。。只有道具和ppt一份
2013年01月17日 12点01分
level 6
int定义的是变量,可以随便赋值,int ledpin=13; 后,ledpin还可以赋予其他值,
#define定义的是恒量,#
define LED 13就是定义LED恒等于13,不能再改变
2013年01月17日 12点01分 7
level 6
好像是出现13的地方都用LED代替吧
2013年01月17日 12点01分 8
反了
2013年01月20日 01点01分
level 9
可以重新赋值,和c语言一样
2013年01月19日 13点01分 9
level 8
第一句定义了一个整型变量。int float char double都是数据类型,分别是整型,单精度符点型,字符型,双精度符点型。第二句是一个宏定义,定义了一个常量。看到LED等同于13,不能再对LED赋值
2013年01月20日 07点01分 10
level 5
我这算是挖坟了。只是想给大家点解释。
首选我们要了解到的一个信息是arduino板子上的两个参数SRAM:2KB,Flash:32KB;
对应到我们使用的电脑呢,你可以认为SRAM是我们的内存,而Flash由是硬盘。先把这个理解清楚。
然后我们回到int 与 #define上来说。
int ledPin 13;
这句的意思是从内存中分配一块8位的内存,并将这块内存中的值设置成13,将这块内存命名成ledPin。
#define LED 13;
这句话的意思是,为13设置一个别名,叫LED,以后所有使用LED这个词语的时候,实际使用的就是13.但在程序运行时,并不会为这个LED分配内存,因为他并不存在。
那么具体他们有什么差别呢?
1.int ledPin 13;这句代码在内存中是有固定位置用来存储的,在程序运行的时候是可以修改13这个值的。
而#define LED 13;则是在内存中没有位置存储,程序运行时候是不可以修改的。
所以可以说,int ledPin 13;在运行更灵活。
那既然更灵活,为什么我们还会有#define LED 13;的代码在使用呢,难到有人不想更灵活?
这就用到我们刚开始说的那个SRAM:2KB了,我们的程序在运行时,一共只有2KB的空间可以用来存储运算数据,如果我们写议了很多类似的int型代码,则有可能会出现内存不足的现像,大家可以试试定议一个大的数据看看这个现像 例如 int led_list[2500];你的程序即使能编译通过,也是无法在大多数arduino板子上运行的,因为内存空间的不足。所以我们在写代码的时候要尽可能的节约对SRAM的使用,这就出现了#define LED 13;这种写法了。
另外,还可以告诉大家的是
用int ledPin 13;与 #define LED 13;在使用digitalWrite的时候,使用#define LED 13;会更快一点,虽然只是一点点,但相对比较起来,可能就有很大不同了。
大家可以用些代码来测量一下,例如:
//下面的代码我没测试过,如果看不出差距,可以将那个20000再调大一点。
#define LED 13
int ledPin 13;
void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned long start1,start2,end1,end2;
int i,tag=0;
start1=millis();
for(i=0;i<20000;i++)
{
digitalWrite(LED, tag);
tag=!tag;
}
end1=millis();
start2=millis();
for(i=0;i<20000;i++)
{
digitalWrite(ledPin , tag);
tag=!tag;
}
end2=millis();
Serial.println(end1-start1);
Serial.println(end2-start2);
}
2015年10月29日 06点10分 11

2015年10月30日 03点10分

2015年10月30日 03点10分

2015年10月30日 03点10分

2015年10月30日 03点10分
level 13
#define LEDPIN 13 的意思是讲程序里所有 LEDPIN 换成13。int LEDPIN =13 意思是定义一个叫做 LEDPIN的有符号整数变量 ,它的值为13。这两个不能同时使用。如果一起使用,编译器就会解释为 int 13 = 13 ,编译器会报错。因为13不能为变量名。
建议楼主好好去先学c++,再研究。
2015年10月29日 10点10分 12
level 6
一个是常量一旦定义不可变,一个是变量可以通过赋值二次改变。
2015年10月29日 23点10分 13
level 1
建议大家不要拿 int led=13 与 #define LED 13 作比较,而是应该比较
const int LED = 13 和 #define LED 13
首先,作为一个严谨的编程习惯,如果并不想在程序中动态计算或改变PIN针脚号,
那么就不要用 int led=13 这样的变量,内存是一方面,好习惯是更重要的一方面。
而 const int LED = 13 和 #define LED 13 也是有内存上的区别的。
如果非要从习惯上来说,相对于 const int LED = A3 和 #define LED A3 我个人还是
更能接受后者,因为把 int 和 A3 放在一起,总是感觉怪怪的。
2017年03月02日 05点03分 14
level 1
厉害了 学到了
2019年02月13日 11点02分 15
1