linux上的.c文件和windows上的.c文件语法规则不同?

小班得瑞 2016-12-19 11:50:27
有这么一段代码,源文件是.c的

network parse_network_cfg(char *filename)
{
list *sections = read_cfg(filename);
node *n = sections->front;
if(!n) error("Config file has no sections");
network net = make_network(sections->size - 1);
net.gpu_index = gpu_index;
size_params params;

section *s = (section *)n->val;
list *options = s->options;
if(!is_network(s)) error("First section must be [net] or [network]");
parse_net_options(options, &net);

params.h = net.h;
params.w = net.w;
params.c = net.c;
params.inputs = net.inputs;
params.batch = net.batch;
params.time_steps = net.time_steps;
params.net = net;

size_t workspace_size = 0;
n = n->next;
int count = 0;
free_section(s);
fprintf(stderr, "layer filters size input output\n");
while(n){
params.index = count;
fprintf(stderr, "%5d ", count);
s = (section *)n->val;
options = s->options;
layer l = {0}; // 这里在Winodws上使用VS2010编译会报错,而linux上编译无问题,layer是一个结构体
LAYER_TYPE lt = string_to_layer_type(s->type);
if(lt == CONVOLUTIONAL){
l = parse_convolutional(options, params);
}else if(lt == LOCAL){
l = parse_local(options, params);
}else if(lt == ACTIVE){
l = parse_activation(options, params);
}else if(lt == RNN){
l = parse_rnn(options, params);
}else if(lt == GRU){
l = parse_gru(options, params);
}else if(lt == CRNN){
l = parse_crnn(options, params);
}else if(lt == CONNECTED){
l = parse_connected(options, params);
}else if(lt == CROP){
l = parse_crop(options, params);
}else if(lt == COST){
l = parse_cost(options, params);
}else if(lt == REGION){
l = parse_region(options, params);
}else if(lt == DETECTION){
l = parse_detection(options, params);
}else if(lt == SOFTMAX){
l = parse_softmax(options, params);
net.hierarchy = l.softmax_tree;
}else if(lt == NORMALIZATION){
l = parse_normalization(options, params);
}else if(lt == BATCHNORM){
l = parse_batchnorm(options, params);
}else if(lt == MAXPOOL){
l = parse_maxpool(options, params);
}else if(lt == REORG){
l = parse_reorg(options, params);
}else if(lt == AVGPOOL){
l = parse_avgpool(options, params);
}else if(lt == ROUTE){
l = parse_route(options, params, net);
}else if(lt == SHORTCUT){
l = parse_shortcut(options, params, net);
}else if(lt == DROPOUT){
l = parse_dropout(options, params);
l.output = net.layers[count-1].output;
l.delta = net.layers[count-1].delta;
#ifdef GPU
l.output_gpu = net.layers[count-1].output_gpu;
l.delta_gpu = net.layers[count-1].delta_gpu;
#endif
}else{
fprintf(stderr, "Type not recognized: %s\n", s->type);
}
l.dontload = option_find_int_quiet(options, "dontload", 0);
l.dontloadscales = option_find_int_quiet(options, "dontloadscales", 0);
option_unused(options);
net.layers[count] = l;
if (l.workspace_size > workspace_size) workspace_size = l.workspace_size;
free_section(s);
n = n->next;
++count;
if(n){
params.h = l.out_h;
params.w = l.out_w;
params.c = l.out_c;
params.inputs = l.outputs;
}
}
free_list(sections);
net.outputs = get_network_output_size(net);
net.output = get_network_output(net);
if(workspace_size){
//printf("%ld\n", workspace_size);
#ifdef GPU
if(gpu_index >= 0){
net.workspace = cuda_make_array(0, (workspace_size-1)/sizeof(float)+1);
}else {
net.workspace = calloc(1, workspace_size);
}
#else
net.workspace = calloc(1, workspace_size);
#endif
}
return net;
}

在代码中注释的位置有问题,linux上和windows上编译,一个能编译通过,另一个不行
...全文
130 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ipqtjmqj 2016-12-19
  • 打赏
  • 举报
回复
编译器不同很正常,用memset就可能了
mLee79 2016-12-19
  • 打赏
  • 举报
回复
随时定义变量是 C99 才加的, M$ 不支持 C99 ..
ri_aje 2016-12-19
  • 打赏
  • 举报
回复
vs 支持的 c 语言版本比较旧,= {0} 这个可能是新语法吧。用 memset 清零就行了。
小灸舞 版主 2016-12-19
  • 打赏
  • 举报
回复
有如下几种可能:
1 代码运行的平台硬件不同。
不同的CPU,如嵌入式CPU,intel CPU,以及IBM的CPU,在硬件最底层就是不同的,而C语言是一门和底层相关性极大的语言,在不同的硬件上运行出不同结果是很正常的。

2 代码运行的系统不同。
相同CPU在不同操作系统上跑相同代码时,一样会出现不同的结果。这是由于系统底层的实现不同造成的。比如Linux和Windows,在底层处理上就有一定的差异。

3 编译器不同,同时代码中使用了C规范未定义规则的语句。
C语言规范并没有对C语言的所有行为做定义,所以相同语句,不同编译器的运行效果可能有所不同。比如同样的sizeof(int),在16位编译器上结果为2,而32位编译器上就会是4。

4 代码获取到的外部数据不同。
比如运行代码时获取到的其它输入不同,包括程序中获取的环境变量,实时信息,以及各种外部输入等,均有可能出现不同。
比如在做随机数时,如果以当前时间设定随机数种子,由于每次的时间是不同的,同一个程序每次运行的结果都是不同的。
fefe82 2016-12-19
  • 打赏
  • 举报
回复
编译器支持的 C 语言版本不一样。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧