test_blah
— это переменная, тип данных struct blah
. Задумывалось, наверное, так:/* blah.h */
struct blah; /* урезанное описание */
/* blah.c */
#include "blah.h"
struct blah { int a, b } /* описание */
test_blah; /* и тут же объявление переменной этого типа */
/* main.c */
#include "blah.h"
/* можно работать с указателями на struct blah */
or
вместо ||
помогает не потому, что у or
приоритет ниже, чем у ||
(хотя это так), а потому он ниже, чем у запятой (,
), в то время как у ||
— выше, чем у запятой."$file"
и не отнесет его к ||
. Кстати, наверное, возможен еще один вариант?(open FILE, "$file") || die "Can't open: $! \n";
extern inline
функция (возможно) будет развернута в inline
в той единице компиляции, где она определена, и из получившегося объекта будет торчать одноименный символ. Все остальные единицы компиляции будут использовать ее как обычную extern
функцию. На SO есть небольшое обсуждение.static inline
плюс добавить не-static
обертку для экспорта. (Или перед компиляцией слить все файлы в один — наверное, так будет даже проще.) Formally, the algorithm defines a value called badness associated with each possible line break; the badness is increased if the spaces on the line must stretch or shrink too much to make the line the correct width. Penalties are added if a breakpoint is particularly undesirable: for example, if a word must be hyphenated, if two lines in a row are hyphenated, or if a very loose line is immediately followed by a very tight line. The algorithm will then find the breakpoints that will minimize the sum of squares of the badness (including penalties) of the resulting lines. If the paragraph contains n possible breakpoints, the number of situations that must be evaluated naively is 2n. However, by using the method of dynamic programming, the complexity of the algorithm can be brought down to O(n2) (see Big O notation). Further simplifications (for example, not testing extremely unlikely breakpoints such as a hyphenation in the first word of a paragraph) lead to an efficient algorithm whose running time is almost always of order n. A similar algorithm is used to determine the best way to break paragraphs across two pages, in order to avoid widows or orphans (lines that appear alone on a page while the rest of the paragraph is on the following or preceding page). However, in general, a thesis by Michael Plass shows how the page breaking problem can be NP-complete because of the added complication of placing figures.[18]