как Объявить глобальный тип данных си
Primary tabs
Forums:
Вообще , чтобы структура была видна как тип в рамках функции - просто объявите её в теле функции как-то так
но что если лезет ошибка типа =
D:\Bu-Bu\training programs\my\C\OS\t1\winfunc.c(10): error #2168: Operands of '=' have incompatible types '(incomplete) struct winparams' and '(incomplete) struct winparams'.
для кода вроде того =
#include <windows.h> // подключаем зоголовочный файл windows, содержащий в том числе описание winapi функций #include "task1.h" #include<stdio.h> #include <stdlib.h> /*обёртка дял функции int task1comp(FILE* fp,FILE* fp2,FILE* rfp) - в качестве параметра получает структуру с тремы указателями на файлы - зависит от функции task1comp(FILE* fp,FILE* fp2,FILE* rfp) */ DWORD WINAPI t1_win_comp( LPVOID lpParam ) { struct winparams strct= *((struct winparams*)lpParam); // ЗДЕСЬ ОШИБКА!!! приводим к типу нашей структуры , данные расположенные по адресу указателя task1comp(strct.fp,strct.fp2,strct.rfp); // вызываем ключевыую функцию сравнения. }
Как вы можете видеть - объявления структуры в данной функции нет (это объявление у меня находится в другом файле с исходным кодом task1.с , также подключённом у проекту) - объявление имеет такой вид =
struct winparams { // структура для передачи параметров в объединённом виде для потока в windows FILE *fp; // указатель на первый файл FILE *fp2; // указатель на втоорй файл FILE *rfp; // указатель на файл, для записи результата };
для той же функции, код которой я привёл выше этого объявления в ином файле не достаточно (incomplete = "недостаточный") - то есть сведений о структуре для преобразования типов недостаточно.
Что же делать?
Давайте попробуем объявить "глобальный" тип данных структуры.
Логично предположить ,что такое объявление должно происходить за рамками "тела" какой-то конкретной функции проекта.
Итак , чтобы сделать тип "глобальным" для всей программы в си - надо поместить определение структуры в некоторм зоголовчном файле и просто включить этот файл во все остальные , где это определение используется.
Например , у меня есть файл winfunc.h в него помимо заголовка функции я добавлю и определение структуры =
#ifndef WINFUNC_H // если включения ещё не было #define WINFUNC_H // определяем эту константу, чтобы избежать повторных включений. DWORD WINAPI t1_win_comp ( LPVOID lpParam ) ; // функция-обёртка для создания нового потока. struct winparams { // структура для передачи параметров в объединённом виде для потока в windows FILE *fp; // указатель на первый файл FILE *fp2; // указатель на втоорй файл FILE *rfp; // указатель на файл, для записи результата } ; #endif
а помните - выше был пример самого winfunc.c - с си кодом - так вот в него я включу собственный заголовок =
#include <windows.h> // подключаем зоголовочный файл windows, содержащий в том числе описание winapi функций #include "task1.h" #include<stdio.h> #include <stdlib.h> #include "winfunc.h" // ДОБАВЛЯЕМ ЗАГОЛОВОК /*обёртка дял функции int task1comp(FILE* fp,FILE* fp2,FILE* rfp) - в качестве параметра получает структуру с тремы указателями на файлы - зависит от функции task1comp(FILE* fp,FILE* fp2,FILE* rfp) */ DWORD WINAPI t1_win_comp( LPVOID lpParam ) { struct winparams strct= *((struct winparams*)lpParam); // приводим к типу нашей структуры , данные расположенные по адресу указателя task1comp(strct.fp,strct.fp2,strct.rfp); // вызываем ключевыую функцию сравнения. }
И ВСЁ РАБОТАЕТ!
_____________________________________________
Источники(читать подробнее)=
http://www.daniweb.com/software-developm...
Ключевые слова и фразы(для поиска)=
объявить структуру так она чтобы была видна всему модулю
объявление структуры си
how to make struct type global c
http://www.daniweb.com/software-developm...
- Log in to post comments
- 5437 reads
vedro-compota
Tue, 01/17/2012 - 18:40
Permalink
hi Billy !! )) WE'RE IN
hi Billy !! )) WE'RE IN WINDOWS NOW !))
----------------
[build as win32 CONSOLE program]
----------------
Please specify the number of the task.
* You can choose on number from set = {1,2}
* Specify "0" to exit
* Choose "t" to test
е
Error(!) = Main menu does not support this command.
Make sure that your task number is from menu set of commands and try again.
Please specify the number of the task.
* You can choose on number from set = {1,2}
* Specify "0" to exit
* Choose "t" to test
t
[...open file for me now...]
[file is open]
12fdg dfb
arthsfgnhjk
bfg
123456789+0
9
[...open file for me now...]
[file is open]
[...open file for me now...]
[file is open]
[...open file for me now...]
[file is open]
[...open file for me now...]
[file is open]
[...text file conversion is started...]
[...number of lines had been found out = 8 ]
[...the quantity of symbols in file in each line had been found out...]
[...text file conversion is started...]
[...number of lines had been found out = 8 ]
[...the quantity of symbols in file in each line had been found out...]
[...two-demision array showing is started...]
12fdg dfb
[i = 0][k = 1]arthsfgnhjk
[i = 0][k = 2]bfg
[i = 0][k = 3]
[i = 0][k = 4]
[i = 0][k = 5]123456789+0
[i = 0][k = 6]9
[i = 0][k = 7]
[...two-demision array showing is started...]
1345642575adfhgs sth sth
[i = 0][k = 1]arthsfgnhjk
[i = 0][k = 2]styj dukeyuks
[i = 0][k = 3]arthty jkyukkkyukdu
[i = 0][k = 4]sthtykj8lkldyu
[i = 0][k = 5]
[i = 0][k = 6]00000000000000000000
[i = 0][k = 7]
[...comparation of two two-demision arrays showing is started...]
===========
(0) (-) | [12fdg dfb] | [1345642575adfhgs sth sth]
---------------------
(1) (+) | [arthsfgnhjk ] | [arthsfgnhjk ]
---------------------
(2) (-) | [bfg] | [styj dukeyuks]
---------------------
(3) (-) | [] | [arthty jkyukkkyukdu]
---------------------
(4) (-) | [] | [sthtykj8lkldyu]
---------------------
(5) (-) | [123456789+0] | []
---------------------
(6) (-) | [9] | [00000000000000000000]
---------------------
(7) (-) | [__________] | [__________]
---------------------
-----------
Please specify the number of the task.
* You can choose on number from set = {1,2}
* Specify "0" to exit
* Choose "t" to test
1
This is task1 menu=
* Specify "1" to use standard files for compare operations
* Choose "2" to specify your own files for comparing
* Specify "9" to come back in main menu
* Specify "0" to exit
1
[...open file for me now...]
[file is open]
[...open file for me now...]
[file is open]
[...open file for me now...]
[file is open]
Please specify the number of the task.
* You can choose on number from set = {1,2}
* Specify "0" to exit
* Choose "t" to test
*** Process returned -1073741819 ***
Press any key to continue...
_____________
матфак вгу и остальная классика =)