功能使用的局部限制

时间:2016-04-23 04:08:06

标签: c

FOO在最终答案中返回'0'的原因是什么:

 int FOO = 0, bar = 0, i;
 for (i = 0; i < 4; i++) {
     int FOO = i;
     printf("%d ", FOO);
     if (i % 2 == 0)
         FOO += bar;
     bar++;
 }
 printf("%d %d", FOO, bar);

1 个答案:

答案 0 :(得分:3)

在foo循环中,您定义了一个名为FOO的变量,这会遮蔽外部的FOO,这意味着您在循环中使用的FOO是仅限块的本地变量。最后的printf在循环之外,因此它打印的FOO是一个驻留在外部范围内的FOO。此时阴影int FOO_out = 0, bar = 0, i; for (i = 0; i < 4; i++) { int FOO_in = i; printf("%d ", FOO_in); if (i % 2 == 0) FOO_in += bar; bar++; } printf("%d %d", FOO_out, bar); 不再存在。 所以代码可以像这样对待:

 tier1.sources  = source1
 tier1.channels = channel1
 tier1.sinks    = sink1

 tier1.sources.source1.type = exec
 tier1.sources.source1.command = cat /testing.txt
 tier1.sources.source1.channels = channel1

 tier1.channels.channel1.type   = memory
 tier1.channels.channel1.capacity = 10000
 tier1.channels.channel1.transactionCapacity = 1000


 tier1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
 tier1.sinks.sink1.topic = sink1
 tier1.sinks.sink1.brokerList = kafkagames-1:9092,kafkagames-2:9092
 tier1.sinks.sink1.channel = channel1
 tier1.sinks.sink1.batchSize = 20