Войти или зарегистрироваться
Выберите удобный способ — аккаунт создастся автоматически.
Или войдите по логину и паролю
 |
|

08.11.2007, 22:04
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
С нами:
10042776
Репутация:
275
|
|
Код:
if (argc < 2) // Проверка параметров
usage(argv[0]);
const char *SqlString = argv[1]; // сохраняем исходную строку в SqlString
const int SqlStringLength = strlen(SqlString); // вычисляем длину переданной строки
char *buffer; // будет хранить указатель на нашу память
в Си объявление переменных должно находиться до любого выполняемого кода.
|
|
|

08.11.2007, 22:21
|
|
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
С нами:
9745696
Репутация:
104
|
|
а что будет если после?:d
|
|
|

08.11.2007, 22:28
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
С нами:
10042776
Репутация:
275
|
|
__mad
А ты типа не знаешь? :-) В зависимости от компилятора. VS2005 гневно ругается, например, и отказывается компилировать.
|
|
|

08.11.2007, 22:58
|
|
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
С нами:
9745696
Репутация:
104
|
|
что то я отсал от жизни
я пользуюсь gcc , там всё норм)
а vc6 незамечал такого...)
|
|
|

08.11.2007, 23:07
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
С нами:
11042306
Репутация:
2726
|
|
Чего ты не замечал? Он про C говорит, а не про С++.
Ни один C-компилятор не допускает обьявлений после кода.
|
|
|

08.11.2007, 23:12
|
|
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
С нами:
9745696
Репутация:
104
|
|
ну так и я про C, а не про С++ в gcc без проблем компилится : D даж предупреждений нету...
зы gcc расшифровывается не C++ : D а GNU project C and C++ compiler 
|
|
|

08.11.2007, 23:13
|
|
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
С нами:
9894190
Репутация:
215
|
|
Сообщение от KEZ
Чего ты не замечал? Он про C говорит, а не про С++.
Ни один C-компилятор не допускает обьявлений после кода.
gcc это компилятор С. Он допускает, подтверждаю. КЕЗ, почему ты так категоричен?
|
|
|

08.11.2007, 23:36
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
С нами:
11042306
Репутация:
2726
|
|
GCC значит это позволяет. Но по стандарту C все обьявления должны быть сделаны ДО первого оператора. Боюсь сейчас сильно напиздить. Во всяком случае, для C это стандарт _оформления_. Как найду ISO стандарты - отпишу. Меня шокировало если честно, что gcc это допускает.
|
|
|

08.11.2007, 23:40
|
|
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
С нами:
9894190
Репутация:
215
|
|
КЕЗ, честно говоря я тоже всегда так думал (про стандарт). Но на форуме (по-моему васм.ру) недавно прочитал про то, что есть какие-то поправки, и, согласно новому стандарту, переменные можно объявлять в теле функции.
|
|
|

09.11.2007, 03:32
|
|
Участник форума
Регистрация: 25.01.2006
Сообщений: 158
С нами:
10679366
Репутация:
361
|
|
 Думал сюда никто не заходит, а тут вон сколько понаписали....
Сообщение от __mad
тоже самое только чутка покороче)
только что - покороче
Сообщение от KEZ
char *buffer;
//...
memset(buffer, 0, sizeof(buffer)); // заполняем нашу память нулями
Чел? А ты в курсе, что sizeof(char*) == 4. или 8 на 64-битных пл-х. но никак не количеству байт, которые ты передавал malloc'у.
o_O Да, как-то не задумывался над этим, спасибо. Поправлю сейчас.
Сообщение от KEZ
Я просто не понимаю, если ты основ С не знаешь, то почему бы не писать на делфи?
Я ведь написал, что опыта у меня МАЛО! Основы в голову сразу не ложатся, понимание приходит со временем. Не будь таким критичным, на ошибках учатся. Теперь я буду делать одной ошибкой меньше. А на счёт делфи... Делфи под Линуксом... Как-то нет желания.
Сообщение от Forcer
в Си объявление переменных должно находиться до любого выполняемого кода.
Это правило хорошего тона - объявлять все переменные вначале программы. Переменная может быть объявлена в любом месте программы до её непосредственного использования. У меня все переменные объявлены ДО их непосредственного использования. Я намерено их объявил после проверки параметров. Зачем мне их объявлять перед функцией usage()? Ни одна из этих переменных ей не используется. usage() завершит выполнение программы если нет параметров, если же они есть, выполнение продолжится. Только в случае, если параметры заданы имеет смысл объявлять эти переменные.
Кстати, gcc не позволяет делать объявления после кода.
Код:
#include <stdio.h>
int main(){
char* buffer = "Hello, World!\n";
printf("%s", buffer);
return 0;
}
Код:
haos@localhost(01:33:40)~/Projects/test $ gcc -o test test.c
haos@localhost(01:35:42)~/Projects/test $ ./test
Hello, World!
haos@localhost(01:35:44)~/Projects/test $
Код:
#include <stdio.h>
int main(){
printf("%s", buffer);
char* buffer = "Hello, World!\n";
return 0;
}
Код:
haos@localhost(01:36:50)~/Projects/test $ gcc -o test test.c
test.c: In function ‘main’:
test.c:5: error: ‘buffer’ undeclared (first use in this function)
test.c:5: error: (Each undeclared identifier is reported only once
test.c:5: error: for each function it appears in.)
haos@localhost(01:37:07)~/Projects/test $
Последний раз редактировалось L0rd_Ha0S; 09.11.2007 в 03:38..
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|