2013-12-01 2 views
2

Извините, если я, по-видимому, глупый, чтобы спросить об этом, но я хочу укрепить свое понимание и устранить любые заблуждения, которые у меня есть о пользовательских функциях.Вызов различных функций определения пользователя в C

«Дело:« У меня есть две функции (могут быть как void, так и int), которые я буду называть их function1 и function2. У меня есть они в файле, который будет вызываться другими программами. У меня есть функция 1 как функция пустоты, вызываемая в другой программе, и будет продолжать вызываться до тех пор, пока программа не закончится (функция 2 не будет работать, когда функция 1 запущена).

Функция2 должна быть выполнена другой программой (не той же программой для функции 1), вызывающей функцию2 (в этом случае функция function1 не должна работать). Функция2 может быть функцией int или void.

Я знаю, что стандартная процедура должна привести их в порядок в мою основную функцию, так как эта программа будет называть только основной. Главным будет работать в порядке функций, возлагаемых (например function1 будет работать первым, то function2)

например

#include<stdio.h> 
#include<stdlib.h> 

void function1(....) 
int function2(...) 

void function1(intA,intB,struct.....) 
{ 
    ...Conditions, loops, whatever 
} 


int function2() 
{ 
.......... 
return(some value) 
} 

В этой части я бы главным в нижнем

int main(int argc, char *argv[]) 
{ 
function1(); 
int A; 

A = function2(); 
.... 
} 

Я думал, что буду использовать, если в других условиях вообще сделать «Случай:» возможным.

Будет ли этот образец кода работать точно так, как я упоминал в верхней части в разделе Case: (с условиями if else)? Если нет, что меня путает? Пример кода в c также очень помог бы с ясными объяснениями.

Скажите, пожалуйста, если что-то смущает мое объяснение или мой вопрос. Я постараюсь дать понять.

+0

Вы хотите использовать инструкцию 'swith', а' if-else' для переключения на вашу функцию? – haccks

+0

- @ Hacce Я предполагаю, что вы имеете в виду оператор switch. Это зависит от того, что у меня есть функция function1 и function2, вызываемая в определенное время (и не работающая одновременно). Коммутатор может работать, но я использую, если другое условие чаще переключается. Я хочу, чтобы мой код следовал тому, что я хочу (Case) – GhostMember

+0

Я не понимаю, что вы имеете в виду под «программой». Это библиотека? Многопоточный? Или это одна программа? И какую проблему вы пытаетесь решить с помощью if-else-statement? – iveqy

ответ

1

Если вы хотите вызвать только одну функцию, используйте параметр командной строки, который вы получаете через argv/argc.

int main(int argc, char *argv[]) 
{ 
    if (argc != 2) return -1; // zero or 2+ commandline arguments 

    if (0 == strcmp(argv[1], "function1")) 
     function1(); 
    else if (0 == strcmp(argv[1], "function2")) 
     function2(); 
    else { return -1; /* error */ } 

    return 0; 
} 

Что происходит за кулисами (перед основной() называется), частичный список:

  • OS создает новый prrocess и выполняет его ввод адреса точки (не основной()).
  • Функция точки входа принимает все аргументы командной строки из ОС в зависимости от ОС.
  • Для инициализации структуры вызывается библиотека C std.
  • Переменные окружения копируются в std-библиотеки.
  • Загружаемые файлы Dependent DLL.
  • Глобалы инициализируются.
  • Создан массив char * (argv). Каждая запись массива указывает на строку C. Первый (argv [0]) всегда является именем exe. Если OS/shell передали аргументы командной строки, они копируются в argv [1], argv [2] и т. Д.
  • main (int, char **) вызывается с argv и argc.

Вся эта работа выполняется для того, чтобы отвлечь ОС от программы. Вышеуказанный поток сильно зависит от ОС и не интересует большинство разработчиков.Когда вы (очень) продвинутый программист на C или если вы заинтересованы в этом потоке, вы можете читать самостоятельно.

главный() прототип определяется стандартом C. На самом деле есть несколько законных прототипов на выбор. Компилятор/компоновщик выберет то, что вы реализуете.

+0

Как работает функция strcmp? Все, что я знаю, это то, что он сравнивает байты и возвращает отрицательное или положительное значение. – GhostMember

+0

разумно лучше вопрос, как каждая часть в этом параметре командной строки работает? Также для else, если для функции 2 было бы важно, была ли это функцией пустоты? – GhostMember

+1

@GhostMember - strcmp вычитает символы из str1 по str2, возвращается первый ненулевой. Положительное число слева выше, отрицательное право выше и равно нулю. – egur

Смежные вопросы