看看下面的代码片段。 这是写于2005年,但我与最新的gcc编译它。
xln_merge_nodes_without_lindo(coeff, cand_node_array, match1_array, match2_array)
sm_matrix *coeff;
array_t *cand_node_array, *match1_array, *match2_array;
{
node_t *n1, *n2;
sm_row *row1, *row2;
static sm_row *xln_merge_find_neighbor_of_row1_with_minimum_neighbors();
while (TRUE) {
row1 = sm_shortest_row(coeff);
if (row1 == NIL (sm_row)) return;
n1 = array_fetch(node_t *, cand_node_array, row1->row_num);
row2 = xln_merge_find_neighbor_of_row1_with_minimum_neighbors(row1, coeff);
n2 = array_fetch(node_t *, cand_node_array, row2->row_num);
array_insert_last(node_t *, match1_array, n1);
array_insert_last(node_t *, match2_array, n2);
xln_merge_update_neighbor_info(coeff, row1, row2);
}
}
在编译时,它抱怨,
xln_merge.c:299:18: error: invalid storage class for function ‘xln_merge_find_neighbor_of_row1_with_minimum_neighbors’
(xln_merger.c:299是在这里第3行定义启动后)。
3号线函数定义似乎是一个函数声明(是不是???)。 难道程序员打算写一个函数指针(静态)? 或者一些语法已改变了在C这是为什么不编译时间。
此代码是从sis
包这里
虽然少见,它是完全有效的,标准的声明中另一个的功能。 然而static修饰符使得在声明中没有意义没有身体,你不能*定义另一个函数内部功能。
难道程序员打算写一个函数指针(静态)?
我不知道原来的程序员的意图,但绝不可以在是一个函数指针,因为没有分配给它。
*其实你可以作为一个GCC扩展
我面临着同样的问题作为错误信息不断说法是:
libvlc.c:507:11: warning: “/*” within comment
libvlc.c:2154: error: invalid storage class for function ‘AddIntfInternal’
libvlc.c:2214: error: invalid storage class for function ‘SetLanguage’
libvlc.c:2281: error: invalid storage class for function ‘GetFilenames’
libvlc.c:2331: error: invalid storage class for function ‘Help’
libvlc.c:2363: error: invalid storage class for function ‘Usage’
libvlc.c:2647: error: invalid storage class for function ‘ListModules’
libvlc.c:2694: error: invalid storage class for function ‘Version’
libvlc.c:2773: error: invalid storage class for function ‘ConsoleWidth’
libvlc.c:2808: error: invalid storage class for function ‘VerboseCallback’
libvlc.c:2824: error: invalid storage class for function ‘InitDeviceValues’
libvlc.c:2910: error: expected declaration or statement at end of input
在简单的解决这个问题是“有一些撑从中我得到这些文件中的错误失踪。”
只要经过下面的例子。
例如:
#include<stdio.h>
int test1()
{
int a = 2;
if ( a == 10)
{
}
会给
test.c:7: error: expected declaration or statement at end of input
下面的错误了“功能无效的存储类”。
所以..只是保持一个手表上的括号也许可以解决此问题。
至少对GCC它会给了“功能无效的存储类”,如果有一个破碎的声明中包含的文件。 你可能想回到你的头文件和寻找什么意图的声明,而是一个挂功能,比如在包含xxx.h文件:
void foo(int stuff){ <<<<<<<<< this is the problem, replace { with ;
void bar(uint other stuff);
在打开的“{”真的混淆GCC和将抛出随机误差后者。 这是真正的容易做到的一个功能的副本,过去,忘记更换{用;
特别是,如果你用我的心爱1TBS