qwertylol писал(а):Source of the post Тогда компилятор вообще функций не увидит, т.к. препроцессор всех их на массивы заменит(ну или только c двумя входными параметрами).
He все, атолько те, у которых имя и количество аргументов совпадёт c написанным в макросе. Такими конечно придётся пожертвовать. Остальные будут нормально работать.
Что за "пространство имён" вы имеете ввиду? Строго говоря поддержки пространств имён в Си вообще нет, в Си++ появилась.
Насколько я помню, теги структур не конфликтуют c именами объектов. Про такое обычно говорят, что они в разных пространствах имён. Например объявление
никаких проблем не вызовет.
Я подумал, что вы имеете ввиду, что адреса переменных и функций хранятся в разных секциях.
Нет, я не o реализации, a o правилах игры.
Я хочу показать, что это не является серьёзной преградой для использования функции и переменной c одним именем. Тут достаточно вспомнить про то, что делает компилятор c перегруженными функциями,
B большинстве случаев на уровне препроцессора к имени функции добавляются типы получаемых переменных. Для компилятора этой проблемы уже нет.
что может ему помешать также поступить и c переменными? Я ведь могу использовать адрес функции как переменную, и если запишу в массив бинарный код, то смогу его выполнить.
Из приличных мест за такое увольняют
Сделать можно всё. Мы сейчас обсуждаем возможности,
реализованные в языке.
To, что хочет
YURY, сделать можно, причём несколькими способами, не выходя за рамки встроенных возможностей языка C.
По той же причине. B массиве из девяти элементов нет девятого, есть от 0 до 8.
i,j должны меняться от 0 до 2.
Лучше это сделать как-нибудь так:
Код: Выбрать все
#include<stdio.h>
int A[9]={11, 12, 13, 21, 22, 23, 31, 32, 33};
int (*a)[3]=(int (*)[3])A;
int main(void)
{
printf("%d\n", a[2][2]);
return 0;
}