ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

08.11.2007, 22:04
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
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
Провел на форуме: 548128
Репутация:
104
|
|
а что будет если после?:d
|
|
|

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

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

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

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

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

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

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

09.11.2007, 03:32
|
|
Участник форума
Регистрация: 25.01.2006
Сообщений: 158
Провел на форуме: 1000724
Репутация:
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)
|
|
|
|