我遇到过一些可以编译的C代码,但我不明白为什么.具体地说,我有一个C库,它有很多使用这种格式的代码:
void get_xu_col(int i_start,
int n,
double x[n],
int n_x,
int n_u,
int n_col,
double xu_col[n_col][n_x + n_u]){
...
}
int main(){
...
double xu_col[n_col][n_x + n_u];
get_xu_col( ..., xu_col );
...
}
我不明白的是,为什么编译器允许在数组中调整大小.据我所知,尺寸必须固定(如xu_col[9][7]
)或未定义(如xu_col[][]
).在上面的代码中,大小似乎不是编译时常量.
编译器是否只是忽略了这里的参数?或者它真的在对维度进行编译时判断?
如果是后者,则单独传递维度似乎很容易出错.
问题的第二部分是:
为什么C++中的版本不一样?当我将文件扩展名从.c
改为.cpp
并try 重新编译时,我得到
candidate function not viable: no known conversion from 'double [n_col][n_x + n_u]' to 'double (*)[n_x + n_u]' for 7th argument
void get_xu_col(int i_start, int n, double x[n], int n_x, int n_u, int n_col, double xu_col[n_col][n_x + n_u]);
我想知道我应该使用哪种习惯用法将这段代码转换成C++,因为显然前面的习惯用法可以在C中使用,但不能在C++中使用.