Я читаю Программирование на C: Современный подход 0NN: K.N.King, чтобы узнать язык программирования C и текущую главу о функциях, а также параметры массива. Это объясняется тем, что можно использовать конструкции, как это выразить длину параметров массива:Длина массива в параметрах массива
1.
void myfunc(int a, int b, int[a], int[b], int[*]); /* prototype */
void myfunc(int a, int b, int n[a], int m[b], int c[a+b+other_func()]) {
... /* body */
}
2.
void myfunc(int[static 5]); /* prototype */
void myfunc(int a[static 5]) {
... /* body */
}
Так вопрос (ы):
a. Являются ли конструкции в примере 1 чисто косметическими или они влияют на компилятор?
b. Модификатор static
в этом контексте только косметической природы? что именно это означает и делает?
c. Можно также объявить параметр массива следующим образом: и является ли это косметическим, как пример 1?
void myfunc(int[4]);
void myfunc(int a[4]) { ... }
Никто не знает. Делайте эксперименты :) – i486
@ i486 Пожалуйста, прекратите лежать. Существует стандарт для языка C. Конечно, кто-то знает. Для справки, делать эксперименты с C является плохой идеей, потому что каждый компилятор делает вещи немного разные. Обратитесь к стандарту, чтобы убедиться. – fuz
Кажется, что все это удаляется при компиляции, и никакие дополнительные проверки не выполняются компилятором. Выражения внутри скобок вычисляются во время выполнения, но их значение, кажется, теряется. Но это все, что можно сказать об этом? А что именно статично? – MinecraftShamrock